Oracle Containers for J2EE
セキュリティ・ガイド
10g(10.1.3.4.0) B50832-01 |
|
この章では、Webアプリケーション・クライアントが透過的に認証されるように、OC4JでWindowsのネイティブ認証(WNA)を設定する方法を説明します。この章の手順を行うには、KerberosおよびActive Directoryに精通している必要があります。
内容は次のとおりです。
WNAを使用すると、Microsoft Internet Explorer(またはMicrosoftのSPNEGOプロトコルをサポートするブラウザ)を使用するデスクトップ・クライアントによって、独自のWindowsデスクトップの資格証明を使用してWebアプリケーションが自動的に認証されるようになります。ユーザーのログイン資格証明を調べるかわりに、WNAを使用するようにOC4J Webアプリケーションを構成できます。
WNAでは、Windowsデスクトップへのログイン時に生成されたKerberosセッション・チケットが使用されます。チケットは、ユーザーに対しては表示されず、ログイン資格証明およびその他が含まれています。チケットは、ブラウザを介してWebアプリケーションに渡されます。SPNEGOプロトコルを使用して、ブラウザからKerberos資格証明が取得されます。Webアプリケーションは、Windowsドメイン・サーバー上のKey Distribution Center(KDC)サーバーに対してこれらの資格証明をチェックし、検証します。正常に認証された場合は、Webアプリケーションへアクセス権が自動的に付与されます。
次の図21-1は、WNA使用時の関連する主要コンポーネントの概念図です。認証フローの説明は図の下にあります。
認証フローは次のとおりです。
WNAを構成する前に、次のタスクを完了しておく必要があります。
oc4jadmin
、およびoc4j-adminstrators
やoc4j-app-adminstrators
などの管理グループです。すべての必須アカウントのリストは、11-17ページの「LDAPサーバーでの必須アカウントの作成」を参照してください。
JSSOがデプロイされているLinuxホスト・システムは、Kerberosクライアントとして構成する必要があります。
Linuxホスト・システムをKerberosクライアントとして構成するには、次のようにします。
/etc/krb5.conf
ファイルを開きます。
[libdefaults]
セクションのdefault_realm
の値を編集し、使用する環境のデフォルトKerberosレルム名に変更します。この名前にはドメイン名を使用できますが、大文字で入力する必要があります。次に例を示します。
[libdefaults] default_realm = MYDOMAIN.COM
[realms]
セクションで、レルム名を手順2で定義した名前に置き換え、値をActive Directoryサーバーの完全修飾ドメイン名(Kerberosのポート番号を含む)に設定します。次に例を示します。
[realms] MYDOMAIN.COM = { kdc = name.mydomain.com:8787 }
[domain_realm]
セクションで、使用するJSSOサーバーのDNSドメイン名をデフォルト・レルムと同一に設定します。次に例を示します。
[domain_realm] .mydomain.com = MYDOMAIN.COM
krb5.conf
ファイルを保存して閉じます。
JSSOがデプロイされているホスト名を使用して、Active DirectoryサーバーでWebアプリケーションのホスト・ユーザー・アカウントを作成する必要があります。
Webアプリケーション・サービスのホスト・ユーザー・アカウントを作成するには、次のようにします。
keytabファイルは、アカウント名をサービス・プリンシパル名にマップするためにWebアプリケーションで使用されます。keytabファイルは必須であり、ktpass
コマンドを使用して生成する必要があります。
Linuxホストのkeytabファイルを生成するには、次のようにします。
C:¥> ktpass -princ HTTP/domain@DEFAULT_REALM -pass password -mapuser host_user_account -out file_name.keytab
詳細は次のとおりです。
-princ
(プリンシパル)値は、HTTP/
の後にWebアプリケーション・サービス・ホストの完全修飾ドメイン名、さらにデフォルト・レルム名を続けたものです。大/小文字が区別されます。Active Directoryのデフォルト・レルムは大文字、Webアプリケーションの完全修飾ドメイン名は小文字で表記する必要があります。次に例を示します。
-princ HTTP/name.mydomain.com@MYDOMAIN.COM
-pass
値は、Active Directoryサーバーで作成されたWebアプリケーションのホスト・ユーザー・アカウントに割り当てられているパスワードと同じにする必要があります。
-mapuser
値は、Active Directoryサーバーで作成されたJSSOの完全修飾ドメイン名(ホスト名)のユーザーです。
-out
値は出力ファイルの名前です。次に例を示します。
MyFile.keytab
ORACLE_HOME/j2ee/home/config
kinit
コマンドを発行してLinuxサーバーとActive Directoryサーバー間のKerberos接続をテストし、両方が適切に構成されていることを確認します。Red Hat Linux用のkinit
実行可能ファイルは、/usr/kerberos/bin
ディレクトリにあります。
# /usr/kerberos/bin/kinit -k -t ORACLE_HOME/j2ee/home/config/keytab_file HTTP/
domain_name
コマンドには、手順2で生成されたkeytabファイルのフルパスおよびWebアプリケーション・サービス・ホストの完全修飾ドメイン名を含める必要があります。次に例を示します。
# /usr/kerberos/bin/kinit -k -t oracle/j2ee/home/config/MyFile.keytab HTTP/
name.mydomain.com
コマンドが正常に実行された場合、コマンドからの出力は行われず、別のコマンド・プロンプトに戻ります。出力でレポートされたエラーは、すべて解決する必要があります。
この項のタスクでは、OC4Jインスタンスを構成し、WNAを使用できるようにデプロイ済Webアプリケーションを構成します。これらのタスクを行う前に、OC4Jインスタンスを停止してください。また、すべてのタスクが完了した後に、必ずOC4Jを起動してください。
WNAを使用するためにOC4Jインスタンスを構成するには、次のタスクを行う必要があります。
OC4Jインスタンスに対してWNAを有効にするには、次の2つのシステム・プロパティを設定する必要があります。これらのプロパティは、通常oc4j.cmd
またはoc4j.sh
(OC4Jの起動に使用されるスクリプト)内で設定されます。oc4j.jar
を使用してOC4Jを直接起動する際に、コマンドラインで設定することもできます。
-Djavax.security.auth.useSubjectCredsOnly=false -Doracle.security.jazn.config =ORACLE_HOME/j2ee/home/config/jazn.xml
Kerberos認証用のデバッグ情報を有効にするために、3つの追加プロパティを任意で設定できます。各プロパティを次に示します。
-Djava.security.krb5.realm=kerberos-realm-name -Djava.security.krb5.kdc=kdc_host_name -Dsun.security.krb5.debug=true
Kerberos WNAとActive Directoryの両方のログイン・モジュールをsystem-jazn-data.xml
ファイルに追加する必要があります。ログイン・モジュールは、OC4Jに登録済のログイン・モジュールが含まれている<jazn-loginconfig>
要素内に追加されます。
Kerberos WNAおよびActive Directoryのログイン・モジュールを追加するには、次のようにします。
ORACLE_HOME
/j2ee/home/config/system-jazn-data.xml
を開きます。
com.sun.security.jgss.accept
アプリケーションのKerberosログイン・モジュール構成を定義する、次のXMLブロックを追加します。keytab
およびprincipal
の値は、4ページの「ステップ3: Linuxホストに対してKeytabファイルを生成してテストする」で指定されたものと同じにする必要があります。keyTab
値にはkeytabファイルの完全パスを含める必要があり、principal
値は、JSSOサーバーを実行するマシンの完全修飾ドメイン名(接頭辞はHTTP/
)にする必要があります。
... <jazn-loginconfig> <application> <name>com.sun.security.jgss.accept</name> <login-modules> <login-module> <class>com.sun.security.auth.module.Krb5LoginModule</class> <control-flag>required</control-flag> <options> <option> <name>debug</name> <value>true</value> </option> <option> <name>addAllRoles</name> <value>true</value> </option> <option> <name>useKeyTab</name> <value>true</value> </option> <option> <name>keyTab</name> <value>C:/j2ee/home/config/MyFile.keytab</value> </option> <option> <name>principal</name> <value>HTTP/name.mydomain.com</value> </option> <option> <name>doNotPrompt</name> <value>true</value> </option> <option> <name>storeKey</name> <value>true</value> </option> </options> </login-module> </login-modules> </application> ...
oracle.security.jaas.ldap.provider.user
: Active Directoryサーバー管理者
oracle.security.jaas.ldap.provider.credential
: Active Directoryサーバー管理者の資格証明
oracle.security.jaas.ldap.user.searchbase
: Active Directoryのユーザー検索ベース
oracle.security.jaas.ldap.role.searchbase
: Active Directoryのロール検索ベース
oracle.security.jaas.ldap.provider.url
: Active DirectoryサーバーのURL
... <jazn-loginconfig> <application> <name>javasso</name> <login-modules> <login-module> <class>oracle.security.jazn.login.module.LDAPLoginModule</class> <control-flag>required</control-flag> <options> <option> <name>oracle.security.jaas.ldap.connect.pool.prefsize</name> <value>10</value> </option> <option> <name>oracle.security.jaas.ldap.provider.connect.pool</name> <value>true</value> </option> <option> <name>oracle.security.jaas.ldap.provider.user</name> <value>cn=administrator,cn=users,dc=dlin,dc=net</value> </option> <option> <name>oracle.security.jaas.ldap.provider.credential</name> <value>!welcome1</value> </option> <option> <name>oracle.security.jaas.ldap.provider.type</name> <value>Active Directory</value> </option> <option> <name>oracle.security.jaas.ldap.connect.pool.maxsize</name> <value>25</value> </option> <option> <name>oracle.security.jaas.ldap.role.searchscope</name> <value>subtree</value> </option> <option> <name>oracle.security.jaas.ldap.user.searchscope</name> <value>subtree</value> </option> <option> <name>oracle.security.jaas.ldap.membership.searchscope</name> <value>direct</value> </option> <option> <name>oracle.security.jaas.ldap.lm.cache_enabled</name> <value>true</value> </option> <option> <name>oracle.security.jaas.ldap.member.attribute</name> <value>member</value> </option> <option> <name>oracle.security.jaas.ldap.connect.pool.initsize</name> <value>2</value> </option> <option> <name>oracle.security.jaas.ldap.connect.pool.timeout</name> <value>300000</value> </option> <option> <name>oracle.security.jaas.ldap.user.object.class</name> <value>inetOrgPerson</value> </option> <option> <name>oracle.security.jaas.ldap.provider.url</name> <value>ldap://name.mydomain.com:389</value> </option> <option> <name>oracle.security.jaas.ldap.role.searchbase</name> <value>cn=builtin,dc=dlin,dc=net</value> </option> <option> <name>oracle.security.jaas.ldap.user.searchbase</name> <value>cn=users,dc=dlin,dc=net</value> </option> <option> <name>oracle.security.jaas.ldap.role.object.class</name> <value>group</value> </option> <option> <name>oracle.security.jaas.ldap.role.name.attribute</name> <value>cn</value> </option> <option> <name>oracle.security.jaas.ldap.user.name.attribute</name> <value>sAMAccountName</value> </option> </options> </login-module> </login-modules> </application> ...
system-jazn-data.xml
ファイルを保存して閉じます。
JAZN構成ファイルを編集して、WNA認証タイプを登録する必要があります。このファイルにはOC4JのJSSO構成が含まれています。
WNA認証タイプを登録するには、次のようにします。
ORACLE_HOME
/j2ee/home/config/jazn.xml
ファイルを開きます。
<jazn>
要素内に次のプロパティを追加します。
<jazn> ... <property name="custom.sso.token.asserter.authtypes" value="WINDOWS-KERBEROS-AUTH"/> ... <jazn>
WNA認証を使用するためには、JSSOアプリケーション用Oracleアプリケーション・デプロイメント・ディスクリプタおよびJSSOを使用するすべてのWebアプリケーションを編集する必要があります。
アプリケーションのデプロイメント・ディスクリプタを編集するには、次のようにします。
ORACLE_HOME
/j2ee/home/application-deployments/javasso/orion-application.xml
ファイルを開きます。
<jazn>
構成をコメント解除します。
<jazn>
構成を追加して、独自のJSSOホストの完全修飾ドメイン名(接頭辞はHTTP@
)を使用するようにkerberos-servicename
値を変更します。
<jazn provider="XML"> <jazn-web-app auth-method="WINDOWS_KERBEROS_AUTH"/> <property name="kerberos-servicename" value="HTTP@name.mydomain.com"/> </jazn>
orion-application.xml
ファイルを保存して閉じます。
orion-application.xml
ファイルを開いて次のようにXMLプロバイダの認証方式属性を変更し、CUSTOM_AUTH
が使用されるようにします。
<jazn provider="XML"> ... <jazn-web-app auth-method="CUSTOM_AUTH"/> ... </jazn>
各アプリケーションのOracleアプリケーション・デプロイメント・ディスクリプタは、ORACLE_HOME
/j2ee/home/application-deployments/
application_name
/orion-application.xml
にあります。
WNAを使用するように構成されているWebアプリケーションにアクセスする前に、クライアントのInternet Explorerのブラウザに、JSSOアプリケーションがデプロイされているホスト名を信頼できるホストとして追加する必要があります。JSSOドメイン内のコンピュータでInternet Explorerが実行されている場合は、Kerberosネゴシエーションが行われます。JSSOドメインの一部でないコンピュータでInternet Explorerが実行されている場合は、フォールバック・ロジックによりBasic認証が使用され、ユーザー名およびパスワードの入力を求められます。ユーザー名およびパスワードは、system-jazn-data.xml
ファイルで構成されているActive Directoryに対して認証されます。
ブラウザの設定を構成してWNA機能をテストするには、次の手順を実行します。
http://dude.mydomain.com
です。JSSOのログイン・ページやポート番号は含めないでください。
http://
host:port
/jsso/SSOLogin
。host:port
を、JSSOアプリケーションへのアクセスに使用するホストおよびポートに置き換えます。ブラウザを介してKerberos資格証明が透過的にJSSOサーバーに渡されるため、JSSOサーバーへのログインが自動的に行われます。最上位ページにリダイレクトされれば、テストは成功です。
|
Copyright © 2003, 2008 Oracle Corporation. All Rights Reserved. |
|