以下の節では、SPNEGO (Simple and Protected Negotiate)メカニズムとKerberosプロトコルに基づくWindows認証とWebLogicネゴシエーションIDアサーション・プロバイダを使用して、Microsoftクライアントでのシングル・サインオン(SSO)を設定する方法について説明します。
Microsoftクライアントでシングル・サインオン(Single sign-on: SSO)を利用すると、WebLogicドメインで動作するWebアプリケーションまたはWebサービスと、Microsoftドメイン内の.NET Webサービス・クライアントまたはブラウザ・クライアント(Internet Explorerなど)の間でクロス・プラットフォーム認証を実行できます。Microsoftのクライアントでは、SPNEGO (Simple and Protected Negotiate)メカニズムに基づいたWindows認証を使用する必要があります。
プラットフォームを越えた認証は、元々Windowsシステム間で行われているKerberosプロトコルを使用した認証サービスをエミュレートすることで実現されます。クロス・プラットフォーム認証を適切に実行するには、非Windowsのサーバー(ここではWebLogic Server)側でSPNEGOトークンを解析し、認証に使用されるKerberosトークンを展開する必要があります。
WindowsおよびKerberosの詳細は、http://technet.microsoft.com/en-us/library/bb742431.aspx
を参照してください。
Microsoftのクライアントに対してSSOを使用する場合、以下の要件があります。
ホスト・コンピュータ側の要件は以下のとおりです。
Windows 2000以降がインストールされています。
Active Directoryによる認証サービスが完全に構成されています。Active Directoryの要件は以下のとおりです。
Kerberosサービスをマッピングするためのユーザー・アカウント群。
それらのアカウント用のサービス・プリンシパル名(Service Principal Names : SPNs)。
キー・タブ・ファイルが作成され、WebLogicドメインの起動ディレクトリにコピーされています。
WebLogic Serverがインストールされ、この章の説明のとおりKerberosを使った認証を行うように適切に構成されています。
クライアント・システム側の要件は次のとおりです。
Windows 2000 Professional SP2以降がインストールされています。
クライアントの種類が以下のいずれかです。
適切に構成されたInternet Explorerブラウザ。サポート対象とされるのはInternet Explorer 6.01以降。
.NETフレームワーク1.1および適切に構成されたWebサービス・クライアント。
クライアントはWindows 2000のドメインにログオンしていて、そのドメイン内のActive Directoryサーバーから取得したKerberosの資格証明を保持している必要があります。ローカル・ログインは機能しません。
MicrosoftのクライアントにSSOを構成するには、Microsoft Active Directory、クライアント、およびWebLogicドメインでの設定手続きが必要です。この手順についてこれ以降の項で説明します。
WebLogic Serverを表すプリンシパルをActive Directoryで定義します。Kerberosプロトコルでは、必要なセキュリティ情報の格納にMicrosoftドメインのActive Directoryサーバーを使用します。
アクセスするMicrosoftドメイン内のMicrosoftのクライアントでは、統合Windows認証を使用し、使用可能な場合にはKerberosチケットを送信するように設定されている必要があります。
WebLogicドメインのセキュリティ・レルムに、ネゴシエーションIDアサーション・プロバイダを構成します。SSOで使用されるWebアプリケーションまたはWebサービスでは、特定の方式による認証セットが保持されていることが必要です。さらに、WebLogic ServerのKerberos IDの場所を定義するJAASログイン・ファイルも作成する必要があります。
Microsoftのクライアントに対するSSOは次のように構成します。
Kerberosを使用するようにネットワーク・ドメインを構成します。「Kerberosを使用するためのネットワーク・ドメインの構成」を参照してください。
WebLogic Server用にKerberos IDを作成します。
WebLogic Serverの動作するホスト用にActive Directoryのユーザー・アカウントを作成します。
作成したアカウント用にサービス・プリンシパル名を作成します。
作成したアカウント用にユーザー・マッピングとキータブ・ファイルを作成します。
「WebLogic Server用のKerberos IDの作成」を参照してください。
Microsoftのクライアント(Webサービスまたはブラウザ)を選択し、統合Windows認証を使用するように構成します。「Microsoftのクライアントで統合Windows認証を使用するための構成」を参照してください。
WebLogicドメインでKerberos認証を使用するように設定します。
MicrosoftドメインのActive Directoryサーバーおよびステップ1で作成したキータブ・ファイルを指し示すJAASログイン・ファイルを作成します。「JAASログイン・ファイルの作成」を参照してください。
WebLogic Serverのセキュリティ・レルムにネゴシエーションIDアサーション・プロバイダを構成します。「ネゴシエーションIDアサーション・プロバイダの構成」を参照してください。
WebLogic Serverを特定の起動引数を使用して起動します。「WebLogic ServerでのKerberos認証における起動引数の使用」を参照してください。
これらの手順について以下の節で詳細に説明します。
Windowsドメイン・コントローラは、Kerberosベース・クライアントおよびホスト・システムのKerberosキー配布センター(KDC)・サーバーとして機能します。どのドメイン・コントローラでも、Active DirectoryサービスおよびKerberosサービスは自動的に実行されます。
Java GSSでは、Kerberos構成ファイルが必要になります。Kerberos構成ファイルのデフォルトのファイル名と格納場所は、使用しているオペレーティング・システムによって異なります。Java GSSでは、次の順序でデフォルトの構成ファイルが検索されます。
Javaプロパティjava.security.krb5.conf
で参照されているファイル
${java.home}/lib/security/krb5.conf
.
Microsoft Windowsプラットフォームの場合は%windir%\krb5.ini
Solarisプラットフォームの場合は/etc/krb5/krb5.conf
Unixプラットフォームの場合は/etc/krb5.conf
Windowsドメイン・コントローラでKerberosを構成するには、Kerberosレルムと使用可能なKDCサーバーを特定するように、KDCにアクセスする各マシンを構成する必要があります。例:
例6-1 サンプルkrb5.iniファイル
[libdefaults] default_realm = MYDOM.COM (Identifies the default realm. Set its value to your Kerberos realm) default_tkt_enctypes = des-cbc-crc default_tgs_enctypes = des-cbc-crc ticket_lifetime = 600 [realms] MYDOM.COM = { kdc = <IP address for MachineA> (host running the KDC) (For Unix systems, you need to specify port 88, as in <IP-address>:88) admin_server = MachineA default_domain = MYDOM.COM } [domain_realm] .mydom.com = MYDOM.COM [appdefaults] autologin = true forward = true forwardable = true encrypt = true
Active Directoryでは、Kerberos認証の主要なコンポーネントであるサービス・プリンシパル名(service principal names: SPN)がサポートされています。SPNは、サーバー上で動作しているサービスに対する一意のIDです。Kerberos認証を使用するすべてのサービスは各自のSPNのセットを保持する必要があり、それによってクライアント側でのネットワーク上のサービスの識別が可能になります。SPNは通常、name@YOUR.REALM
のようになっています。KerberosレルムのWebLogic Serverを表すSPNを定義する必要があります。サービスにSPNが設定されていないと、クライアントではそのサービスの場所を特定できません。つまり、SPNが正しく設定されていなければKerberos認証は不可能だということになります。一連のSPNを格納するメカニズムとしてキータブ・ファイルがあります。キータブ・ファイルはWebLogicドメインにコピーして、ログイン・プロセスで使用します。この構成手順では、WebLogic Server用のSPN、ユーザー・マッピング、およびキータブ・ファイルの作成方法について説明します。
この構成手順では、次のActive Directoryユーティリティを使用します。
setspn
- Windows 2000リソース・キット
ktpass
- Program Files\Support Tools
内のWindows 2000配布用CD
注意: setspn およびktpass Active DirectoryユーティリティはMicrosoftの製品です。そのため、Oracleではこのユーティリティに関する詳細なドキュメントを提供していません。詳細については、Microsoftの適切なドキュメントを参照してください。 |
Kerberos IDの作成プロセスは次のとおりです。
Active DirectoryサーバーにWebLogic Serverが動作するホスト・コンピュータのユーザー・アカウントを作成します(「新規作成」>「コンピュータ」ではなく、「新規作成」>「ユーザー」を選択します)。
ユーザー・アカウントを作成する際には、シンプルなコンピュータ名を使用してください。たとえば、ホスト名がmyhost.example.com
の場合、Active Directoryのユーザーはmyhost
のような名前にします。
ユーザー・アカウントの作成時に定義したパスワードを書き留めておいてください。「ステップ3: サービス・プリンシパル名の定義とサービスのキータブの作成」で説明する手順にこのパスワードが必要になります。「ユーザーは次回ログオン時にパスワードの変更が必要」オプションやその他のパスワード・オプションを選択しないでください。
Kerberosプロトコルに準拠するように新しく作成したユーザー・アカウントを構成します。ユーザー・アカウントの暗号タイプはDESにする必要があり、アカウントはKerberos事前認証を必要とします。
注意: Windows 2003およびIBM JDK 6でWebLogic Serverを実行している場合、ユーザー・アカウントの暗号タイプはRC4-HMACにします。 |
左ペインの「ユーザー」ツリーでユーザー・アカウント名を右クリックして、「プロパティ」を選択します。
「アカウント」タブを選択して、このアカウントにDES暗号化を使うチェック・ボックスを選択します。その他のボックス(特にKerberos事前認証を必要としないボックス)が選択されていないことを確認します。
「OK」をクリックします。
警告: 暗号タイプを設定すると、パスワードが破損するおそれがあります。そのため、ユーザー・パスワードをリセットする必要があります。ユーザー・アカウントの名前を右クリックして「パスワードの再設定」を選択し、「ステップ1: ホスト・コンピュータのユーザー・アカウントの作成」で作成したパスワードと同じパスワードを再入力してください。 |
「WebLogic ServerのKerberos IDの作成」で示すように、SPNは、サービスのインスタンスを識別する一意の名前で、サービス・インスタンスが実行するログオン・アカウントに関連付けられます。SPNは、特定のサービスをホストするクライアントとサーバー間の相互認証のプロセスで使用されます。接続しようとするサービスのSPNに基づきクライアントがコンピュータ・アカウントを検出します。そのため、特定のプロジェクトでは、WebLogicクライアントから呼び出されるサービスと、WebLogic Serverに定義したアカウントを結び付ける必要があります。たとえば、WebLogicブラウザ・クライアントで呼び出されるサービスHTTP/myhost.example.com
は、myhost
アカウントと結び付ける必要があります。
Windowsアカウント名はKerberosプリンシパル名としてのマルチパートではありません。このため、名前HTTP/
hostname.dns.com
を使用してアカウントを直接作成することはできません。このようなプリンシパル・インスタンスは、サービス・プリンシパル名マッピングによって作成されます。この場合、アカウントは意味のある名前hostname
で作成され、サービス・プリンシパル名マッピングはHTTP/
hostname.dns.com
に対して追加されます。
SPNを定義してサービスのキータブを作成する固有の手順は、WebLogic Serverが実行している基盤のプラットフォームによって異なります。これらについては次の項で説明します。
WebLogic ServerがWindowsシステムで実行する場合、次の手順を実行します。
setspn
ユーティリティを使用して、ステップ1で作成されたWebLogic ServerアカウントのHTTPサービスのSPNを作成します。例:
setspn -A HTTP/myhost.example.com myhost
setspn -L
コマンドを入力して、ユーザー・アカウントに関連付けられるSPNを特定します。例:
setspn -L myhost
ヒント: 前述の手順は重要です。同じサービスがActive Directoryサーバーの異なるアカウントに結び付けられている場合、クライアントはサーバーにKerberosチケットを送信しません。 |
ktab
ユーティリティを使用して、WebLogic Serverマシンにエクスポートされるキータブを作成します。ktab
ユーティリティを実行するコマンドの構文は次のとおりです(Kerberosレルム名はすべて大文字で入力してください)。
ktab -k keytab-file-name -a account-name@REALM.NAME
例:
ktab -k mykeytab -a myhost@MYDOM.COM
パスワードが求められた場合、ステップ1で作成したパスワードを入力します。
キータブ・ファイルを安全な場所に保存し、そのファイルをWebLogic Serverインスタンスのドメイン・ディレクトリ(myhost
など)にエクスポートします。
WebLogic ServerがUNIXシステムで実行する場合、ktpass
コマンドライン・ツールを使用して、WebLogic ServerアカウントのHTTPサービスのSPNとキータブ・ファイルを作成します。このツールを使用すると、管理者はWindows Server Active Directoryのセキュリティ・プリンシパルとしてWindows Server以外のKerberosサービスを構成できます。
ktpass
コマンドは、Active Directoryでサービスのサーバー・プリンシパル名を構成し、サービスの共有秘密鍵を含むKerberosキータブ・ファイルを生成します。ツールを使用すると、Kerberos認証をサポートするUNIXベースのサービスでは、Windows Server Kerberos KDCサービスで提供される相互運用機能を使用できます。
ktpass
コマンドの構文は次のようになります。
ktpass -princ HTTP/hostname@REALM-NAME -mapuser account-name -pass password -out keytab-file-name
例:
ktpass -princ HTTP/myhost.example.com@MYDOM.COM -mapuser myhost -pass welcome1 -out mykeytab
注意: ktpass コマンドは、Active Directoryサーバーでプリンシパル名を、account-name からHTTP/ account-name に変更します。その結果、HTTP/ account-name というプリンシパルに対してキータブ・ファイルが生成されます。ただし、名前が変更されない場合があります。変更されない場合、Active Directoryサーバーで名前を手動で変更する必要があります。変更を行わない場合、生成したキータブは適切に機能しません。
ユーザー・ログオン名を手動で変更するには、次の操作を行います。
|
kinit
ユーティリティを使用して、Kerberosが正しく設定されていることと、プリンシパルおよびキータブが有効であることを検証します。
JREで提供されるkinit
ユーティリティを使用して、Kerberosチケット許可チケットを取得およびキャッシュできます。kinit
ユーティリティを実行するには、次のコマンドを入力します。
kinit -k -t keytab-file account-name
出力は次のようになります。
New ticket is stored in cache file C:\Documents and Settings\Username\krb5cc_myhost
シングル・サインオンを利用するMicrosoftのクライアントでは、必ず統合Windows認証を使用するように構成します。以下の節では、.NET Webサーバー、Internet Explorerブラウザ・クライアント、およびMozilla Firefoxクライアントで、統合Windows認証を使用するように構成する方法を説明します。
.NET WebサービスでWindows認証を使用するようにするには、次のように構成します。
Webサービスのweb.config
ファイルで、IISおよびASP.NETの認証モードを次のようにWindowsに設定します。
<authentication mode="Windows" />
通常、これはデフォルトの設定です。
Webサービス・クライアントがプロキシWebサービス・オブジェクトに渡されるために必要な文を追加して、SOAPを介して資格証明が送られるようにします。
たとえば、プロキシ・オブジェクトconv
で表されるWebサービスに対するWebサービス・クライアントの場合、次のような構文になります。
/* * Explicitly pass credentials to the Web Service */ conv.Credentials = System.Net.CredentialCache.DefaultCredentials;
Internet ExplorerブラウザでWindows認証を使用するように構成するには、Internet Explorerで以下の手順を実行します。
Internet Explorerで、「ツール」>「インターネット・オプション」の順に選択します。
「セキュリティ」タブを選択します。
「イントラネット」を選択し、「サイト」をクリックします。
「イントラネット」ポップアップ・ウィンドウで「プロキシ サーバーを使用しないサイトをすべて含める」オプションおよび「ほかのゾーンにないローカル (イントラネット) のサイトをすべて含める」オプションが選択されていることを確認します。
「詳細設定」をクリックします。
「イントラネット」ダイアログ・ボックスで、SSO構成に参加するWebLogic Serverインスタンスに対して使用されるすべての関連ドメインの名前(例: myhost.example.com
)を追加し、「OK」をクリックします。
「ツール」>「インターネット・オプション」を選択します。
「セキュリティ」タブを選択します。
「イントラネット」を選択し、「レベルのカスタマイズ...」をクリックします。
「セキュリティの設定」ダイアログ・ボックスでスクロールして「ユーザー認証」セクションを見つけます。
「イントラネット・ゾーンでのみ自動的にログインする」オプションを選択します。このオプションを選択すると、ログオン用の資格証明を再入力する必要がなくなります。これがこのソリューションの重要な部分です。
「OK」をクリックします。
プロキシ・サーバーを有効にしている場合には、以下の手順を実行します。
「ツール」>「インターネット・オプション」を選択します。
「接続」タブを選択し、「LANの設定」をクリックします。
プロキシ・サーバーのアドレスとポート番号が正しいかどうかを検証します。
「詳細設定」をクリックします。
「プロキシの設定」ダイアログ・ボックスで、「例外」フィールドに目的とするドメイン名がすべて入力されていることを確認します。
「OK」をクリックして「プロキシの設定」ダイアログ・ボックスを閉じます。
Windows統合認証を使用するようにFirefoxブラウザを構成するには、次の手順に従います。
Firefoxを起動します。
ロケーション・バーにabout:config
と入力します。
フィルタ文字列としてnetwork.negotiate
と入力します。
各プリファレンスを表6-1のように設定します。
表6-1 FirefoxでWindows統合認証を使用するために必要なプリファレンス
プリファレンス名 | ステータス | タイプ | 値 |
---|---|---|---|
network.negotiate-auth.allow-proxies |
default |
boolean |
true |
network.negotiate-auth.delegation-uris |
user set |
string |
http://,https:// |
network.negotiate-auth.gsslib |
default |
string |
<blank>脚注1 |
network.negotiate-auth.trusted-uris |
user set |
string |
http://,https:// |
network.negotiate-auth.using-native-gsslib |
default |
boolean |
true |
脚注1network.negotiate-auth.gsslib
プリファレンスの値は空白にしてください。
WindowsまたはUNIXのプラットフォームでWebLogic Serverを実行している場合、JAASログイン・ファイルが必要です。JAASログイン・ファイルでの指定によってWebLogic SecurityフレームワークでKerberos認証が使用されるようになります。また、JAASログイン・ファイルにはWebLogic ServerのKerberos ID情報の格納されたキータブ・ファイルの場所も定義します。このファイルの場所は、WebLogic Serverのjava.security.auth.login.config
起動引数で指定します。「WebLogic ServerでのKerberos認証における起動引数の使用」を参照してください。
注意: JDK 5.0およびJDK 1.4の場合、JAASログイン・エントリ名は、com.sun.security.jgss.initiate およびcom.sun.security.jgss.accept になります。
JDK 6.0の場合、JAASログイン・エントリ名は、 |
例6-2に、Kerberos認証用のJAASログイン・ファイルのサンプルを示します。重要な部分は太字で示されています。
例6-2 Kerberos認証用のJAASログイン・ファイルのサンプル
com.sun.security.jgss.krb5.initiate { com.sun.security.auth.module.Krb5LoginModule required principal="myhost@Example.CORP" useKeyTab="true" keyTab="mykeytab" storeKey="true"; }; com.sun.security.jgss.krb5.accept { com.sun.security.auth.module.Krb5LoginModule required principal="myhost@Example.CORP" useKeyTab="true" keyTab="mykeytab" storeKey="true"; };
プリンシパル・オプションには、サービスを実行しているアカウントのuserPrincipalName
の属性を指定します(間違ったユーザー・プリンシパル名を指定すると、「Unable to obtain password from user」などのエラーが発生します)。
keytab
オプションに指定するキータブ・ファイルは、WebLogic Serverプロセスからアクセスできるファイルでなければなりません。適切な権限が設定されていることを確認してください。WebLogic Serverで使用されている検索パスが不明な場合は、ファイルへの絶対パスを指定します。パスは二重引用符で囲み、パス内のバックスラッシュ(\
)は二重バックスラッシュ(\\
)またはフォワード・スラッシュ(/
)で置き換えてください。
WebLogic Serverには、Microsoftクライアントを使用したシングル・サインオン(SSO)をサポートするセキュリティ・プロバイダ、ネゴシエーションIDアサーション・プロバイダがあります。このIDアサーション・プロバイダでは、SPNEGO (Simple and Protected Negotiate)のトークンをデコードしてKerberosのトークンを取得し、そのKerberosトークンを検証した後でWebLogicユーザーにマップします。Microsoftクライアントを使用したSSOを有効にするには、WebLogicセキュリティ・レルムでネゴシエーションIDアサーション・プロバイダを構成する必要があります。『Oracle WebLogic Server管理コンソール・ヘルプ』のネゴシエーションIDアサーション・プロバイダの構成、および認証プロバイダおよびIDアサーション・プロバイダの構成に関する項を参照してください。
WebLogic ServerでKerberos認証を使用するには、WebLogic Serverの起動時に以下の起動引数を使用します。
-Djavax.security.auth.useSubjectCredsOnly=false -Djava.security.auth.login.config=krb5Login.conf -Djava.security.krb5.realm=Example.CORP -Djava.security.krb5.kdc=ADhostname
説明:
javax.security.auth.useSubjectCredsOnly
には、サブジェクトの資格証明ではない認証メカニズムの使用を認めることを指定します。
java.security.auth.login.config
には、JAASログイン・ファイルkrb5Login.conf
を指定します(「JAASログイン・ファイルの作成」を参照)。
java.security.krb5.realm
には、Active Directoryサーバーが動作するMicrosoftドメインを定義します。
java.security.krb5.kdc
には、Active Directoryサーバーが動作するホストの名前を定義します。
Java GSSメッセージはトラブルシューティングで非常に役立つことが多いため、初期設定の段階で- Dsun.security.krb5.debug=true
を追加しておくとよいでしょう。
Microsoftのクライアントを含むSSOが適切に構成されているかどうかを検証するには、使用するMicrosoftのWebアプリケーションまたはWebサービスをブラウザ(「Internet Explorerブラウザの構成」の説明に従って構成したもの)で指定します。Windowsドメインにログオンし、そのドメインのActive DirectoryサーバーからKerberos資格証明を取得している場合、ユーザー名とパスワードを指定せずにWebアプリケーションまたはWebサービスにアクセスできるはずです。