以下の節では、SPNEGO (Simple and Protected Negotiate) メカニズムと Kerberos プロトコルに基づく Windows 認証と WebLogic ネゴシエート ID アサーション プロバイダを使用して、Microsoft クライアントでのシングル サインオン (SSO) を設定する方法について説明します。
Microsoft クライアントでシングル サインオン (Single sign-on : SSO) を利用すると、WebLogic Server のドメインで動作する 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)。
keytab ファイルが作成され、WebLogic Server ドメインの起動ディレクトリにコピーされている。
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 Server ドメインでの設定手続きが必要です。この手順についてこれ以降の節で説明します。
WebLogic Server を表すプリンシパルを Active Directory で定義する。Kerberos プロトコルでは、必要なセキュリティ情報の格納に Microsoft ドメインの Active Directory サーバを使用します。
アクセスする Microsoft ドメイン内の Microsoft のクライアントでは、統合 Windows 認証を使用し、使用可能な場合には Kerberos チケットを送信するように設定されていなくてはならない。
WebLogic Server ドメインのセキュリティ レルムに、ネゴシエート ID アサーション プロバイダをコンフィグレーションする。SSO で使用される Web アプリケーションまたは Web サービスでは、特定の方式による認証セットが保持されていることが必要です。さらに、WebLogic Server の Kerberos ID の場所を定義する JAAS ログイン ファイルも作成する必要があります。
Microsoft のクライアントに対する SSO は次のようにコンフィグレーションします。
Kerberos を使用するようにネットワーク ドメインをコンフィグレーションします。「Kerberos を使用するためのネットワーク ドメインのコンフィグレーション」を参照してください。
WebLogic Server 用に Kerberos ID を作成します。
WebLogic Server の動作するホスト用に Active Directory のユーザ アカウントを作成します。
作成したアカウント用にサービス プリンシパル名を作成します。
作成したアカウント用にユーザ マッピングと keytab ファイルを作成します。
「WebLogic Server 用の Kerberos ID の作成」を参照してください。
Microsoft のクライアント (Web サービスまたはブラウザ) を選択し、統合 Windows 認証を使用するようにコンフィグレーションします。「Microsoft のクライアントで統合 Windows 認証を使用するためのコンフィグレーション」を参照してください。
WebLogic Server ドメインで Kerberos 認証を使用するように設定します。
Microsoft ドメインの Active Directory サーバおよび手順 1 で作成した keytab ファイルを指し示す JAAS ログイン ファイルを作成します。「JAAS ログイン ファイルの作成」を参照してください。
WebLogic Server のセキュリティ レルムにネゴシエート ID アサーション プロバイダをコンフィグレーションします。「ネゴシエート ID アサーション プロバイダのコンフィグレーション」を参照してください。
WebLogic Server を特定の起動引数を使用して起動します。「WebLogic Server での Kerberos 認証における起動引数の使用」を参照してください。
これらの手順について以下の節で詳細に説明します。
Windows ドメイン コントローラは、Kerberos キー配布センター (KDC) として機能し、Active Directory サービスおよび Kerberos サービスを使用します。どのドメイン コントローラでも、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 (デフォルト レルムを指定する。使用する Kerberos レルムにこの値を設定する) default_tkt_enctypes = des-cbc-crc default_tgs_enctypes = des-cbc-crc ticket_lifetime = 600 [realms] MYDOM.COM = { kdc = <IP address for MachineA> (KDC が実行されているホスト) (Unix システムの場合、<IP-address>:88 のようにポート 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 を格納するメカニズムとして keytab ファイルがあります。keytab ファイルは WebLogic Server ドメインにコピーして、ログイン プロセスで使用します。このコンフィグレーション手順では、WebLogic Server 用の SPN、ユーザ マッピング、および keytab ファイルの作成方法について説明します。
このコンフィグレーション手順では、以下の Active Directory ユーティリティを使用します。
setspn - Windows 2000 リソース キット
ktpass - Program Files\Support Tools
内の Windows 2000 配布用 CD
注意 : setspn および ktpass Active Directory ユーティリティは Microsoft の製品です。そのため、Oracle ではこのユーティリティに関する詳細なドキュメントを提供していません。詳細については、Microsoft の適切なドキュメントを参照してください。 |
WebLogic Server 用の Kerberos ID を作成するには以下の手順を行います。
Active Directory サーバに WebLogic Server が動作するホスト コンピュータのユーザ アカウントを作成します ([新規作成|コンピュータ] ではなく、[新規作成|ユーザー] を選択します)。
ユーザ アカウントを作成する際には、シンプルなコンピュータ名を使用してください。たとえば、ホスト名が myhost.example.com
の場合、Active Directory のユーザは myhost のような名前にします。
ユーザ アカウントの作成時に定義したパスワードは記録しておきます。これは手順 3 で必要になります。[ユーザは次回ログオン時にパスワードの変更が必要] オプションなどのパスワード オプションはオンにしないでください。
Kerberos プロトコルに準拠するように新しく作成したユーザ アカウントをコンフィグレーションします。ユーザ アカウントの暗号タイプは DES にする必要があり、アカウントは Kerberos 事前認証を必要とします。
左ペインの [Users] ツリーでユーザ アカウント名を右クリックして、[プロパティ] を選択します。
[アカウント] タブを選択して、[このアカウントに DES 暗号化を使う] チェック ボックスをチェックします。その他のボックス (特に [Kerberos 事前認証を必要としない] ボックス) がチェックされていないことを確認します。
暗号タイプを設定すると、パスワードが破損するおそれがあります。そのため、ユーザ パスワードをリセットする必要があります。ユーザ アカウントの名前を右クリックして [パスワードのリセット] を選択し、上記で指定したパスワードと同じパスワードを再入力してください。
setspn ユーティリティを使用して、手順 1 で作成したユーザ アカウントに対して一連の SPN (Service Principal Name) を作成します。以下のコマンドを入力します。
setspn -a host/myhost.example.com myhost setspn -a HTTP/myhost.example.com myhost
次のコマンドを使用して、ユーザ アカウントに関連付けられている SPN を確認します。
setspn -L account name
この手順は重要です。同じサービスが Active Directory サーバの異なるアカウントにリンクされていると、クライアントはサーバに Kerberos チケットを送信しません。
ktpass ユーティリティを使用してユーザ マッピングを作成します。Windows の場合
ktpass -princ host/myhost@Example.CORP -pass password -mapuser myhost -out c:\temp\myhost.host.keytab
keytab ファイルを作成します。Windows では、ktab ユーティリティによってキー テーブルでプリンシパル名とキーのペアが管理されます。このユーティリティを使用して、プリンシパル名とキーのペアを表示、追加、更新、または削除できます。UNIX では、ktpass ユーティリティの使用が適しています。
Windows の場合
WebLogic Server が動作しているホスト上で ktab ユーティリティを実行して、keytab ファイルを作成します。
ktab -k keytab-filename -a myhost@Example.CORP
keytab ファイルを WebLogic Server ドメインの起動ディレクトリにコピーします。
UNIX の場合
次のようなコマンドで、ktpass ユーティリティを使用してユーザ マッピングを作成します。password
は手順 1 で作成したユーザ アカウントのパスワードです。
ktpass -princ HTTP/myhost@Example.CORP -pass password -mapuser myhost -out c:\temp\myhost.HTTP.keytab
手順 a で作成した keytab ファイルを WebLogic Server ドメインの起動ディレクトリにコピーします。
root としてログインしてから ktutil ユーティリティを使用して以下のように単一の keytab に結合します。
ktutil: "rkt myhost.host.keytab" ktutil: "rkt myhost.HTTP.keytab" ktutil: "wkt mykeytab" ktutil: "q"
kinit ユーティリティを実行して Kerberos 認証が正しく機能するかどうかを検証します。
kinit -k -t keytab-file account-name
出力は次のようになるはずです。
New ticket is stored in cache file C:\Documents and Settings\Username\krb5cc_MachineB
シングル サインオンを利用する 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 サービス クライアントの場合、以下のような構文になります。
/* * Web サービスに明示的に資格を渡す */ 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 |
初期設定値 |
真偽値 |
true |
network.negotiate-auth.delegation-uris |
ユーザ設定 |
文字列 |
http://、https:// |
network.negotiate-auth.gsslib |
初期設定値 |
文字列 |
<blank>脚注 1 |
network.negotiate-auth.trusted-uris |
ユーザ設定 |
文字列 |
http://、https:// |
network.negotiate-auth.using-native-gsslib |
初期設定値 |
真偽値 |
true |
脚注 1 設定 network.negotiate-auth.gsslib
の値は空のままにする必要があります。
Windows または UNIX のプラットフォームで WebLogic Server を実行している場合、JAAS ログイン ファイルが必要です。JAAS ログイン ファイルでの指定によって WebLogic Security フレームワークで Kerberos 認証が使用されるようになります。また、JAAS ログイン ファイルには WebLogic Server の Kerberos ID 情報の格納された keytab ファイルの場所も定義します。JAAS ログイン ファイルの場所は、WebLogic Server の java.security.auth.login.config
起動引数で指定します。「WebLogic Server での Kerberos 認証における起動引数の使用」を参照してください。
注意 : JDK 1.5 および JDK 1.4 の場合、JAAS ログイン エントリ名はcom.sun.security.jgss.accept です。
JDK 1.6 では、JAAS ログイン エントリ名が |
コード リスト 6-2 に、Kerberos 認証用の JAAS ログイン ファイルのサンプルを示します。重要な部分は太字で示されています。
コード リスト 6-2 Kerberos 認証用の JAAS ログイン ファイルのサンプル
com.sun.security.jgss.initiate { com.sun.security.auth.module.Krb5LoginModule required principal="myhost@Example.CORP" useKeyTab=true keyTab=mykeytab storeKey=true; }; com.sun.security.jgss.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
オプションに指定する keytab ファイルは、WebLogic Server プロセスからアクセスできるファイルでなければなりません。適切なパーミッションが設定されていることを確認してください。WebLogic Server で使用されている検索パスが不明な場合は、ファイルへの絶対パスを指定します。
WebLogic Server には、Microsoft クライアントを使用したシングル サインオン (SSO) をサポートするセキュリティ プロバイダ、ネゴシエート ID アサーション プロバイダがあります。この ID アサーション プロバイダでは、SPNEGO (Simple and Protected Negotiate) のトークンをデコードして Kerberos のトークンを取得し、その Kerberos トークンを検証した後で WebLogic ユーザにマップします。Microsoft クライアントを使用した SSO を有効にするには、WebLogic セキュリティ レルムでネゴシエート ID アサーション プロバイダをコンフィグレーションする必要があります。「ネゴシエート ID アサーション プロバイダのコンフィグレーション」、および Oracle Fusion Middleware Oracle WebLogic Server の Administration Console オンライン ヘルプの「認証および 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 サービスにアクセスできるはずです。