ヘッダーをスキップ

Oracle Containers for J2EE セキュリティ・ガイド
10g(10.1.3.4.0)

B50832-01
目次
目次
索引
索引

戻る 次へ

21 Windowsのネイティブ認証の構成

この章では、Webアプリケーション・クライアントが透過的に認証されるように、OC4JでWindowsのネイティブ認証(WNA)を設定する方法を説明します。この章の手順を行うには、KerberosおよびActive Directoryに精通している必要があります。

内容は次のとおりです。

WNAの概要

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使用時の関連する主要コンポーネントの概念図です。認証フローの説明は図の下にあります。

図21-1    WNAの概念図およびフロー


認証フローは次のとおりです。

WNAを構成するための前提条件

WNAを構成する前に、次のタスクを完了しておく必要があります。

ステップ1: Linuxホスト・システムをKerberosクライアントとして構成する

JSSOがデプロイされているLinuxホスト・システムは、Kerberosクライアントとして構成する必要があります。

Linuxホスト・システムをKerberosクライアントとして構成するには、次のようにします。

  1. Linuxホスト・サーバー上で/etc/krb5.confファイルを開きます。

  2. [libdefaults]セクションのdefault_realmの値を編集し、使用する環境のデフォルトKerberosレルム名に変更します。この名前にはドメイン名を使用できますが、大文字で入力する必要があります。次に例を示します。

    [libdefaults]
     default_realm = MYDOMAIN.COM
    
    
  3. [realms]セクションで、レルム名を手順2で定義した名前に置き換え、値をActive Directoryサーバーの完全修飾ドメイン名(Kerberosのポート番号を含む)に設定します。次に例を示します。

    [realms]
     MYDOMAIN.COM = {
      kdc = name.mydomain.com:8787
     }
    
    
  4. [domain_realm]セクションで、使用するJSSOサーバーのDNSドメイン名をデフォルト・レルムと同一に設定します。次に例を示します。

    [domain_realm]
    .mydomain.com = MYDOMAIN.COM
    
    
  5. krb5.confファイルを保存して閉じます。

  6. JSSOサーバーとActive Directoryサーバーのクロックが同期していることを確認します。時刻、日付およびタイムゾーンの設定も確認してください。

ステップ2: Active Directoryでユーザー・アカウントを作成する

JSSOがデプロイされているホスト名を使用して、Active DirectoryサーバーでWebアプリケーションのホスト・ユーザー・アカウントを作成する必要があります。

Webアプリケーション・サービスのホスト・ユーザー・アカウントを作成するには、次のようにします。

  1. 管理者としてActive Directoryサーバーにログインします。

  2. 「スタート」「すべてのプログラム」「管理ツール」「Active Directoryユーザーとコンピュータ」の順にクリックします。

  3. 「Users」フォルダを選択します。

  4. 「ユーザーの作成」をクリックします。

  5. 次の情報を入力します。

    • 「名」: このアカウントのニックネームを入力します。判読可能な任意の名前を指定できます。

    • 「ユーザー ログオン名」: JSSOホストの完全DNS名。たとえばmydomain.comです。

  6. 「次へ」をクリックします。

  7. このユーザーのパスワードを入力します。パスワード期限の設定は選択しないでください。

  8. 「次へ」をクリックします。ユーザーのリストに新しいユーザーが表示されます。

ステップ3: Linuxホストに対してKeytabファイルを生成してテストする

keytabファイルは、アカウント名をサービス・プリンシパル名にマップするためにWebアプリケーションで使用されます。keytabファイルは必須であり、ktpassコマンドを使用して生成する必要があります。

Linuxホストのkeytabファイルを生成するには、次のようにします。

  1. Active Directoryサーバーでコマンド・プロンプトを開きます。

  2. 次のコマンドを発行します。

    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
      
      
  3. JSSOがデプロイ済でLinuxホスト上で構成済のOC4Jインスタンスに、生成されたkeytabファイルをコピーします。次に例を示します。

    ORACLE_HOME/j2ee/home/config
    
    
  4. 次の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

    コマンドが正常に実行された場合、コマンドからの出力は行われず、別のコマンド・プロンプトに戻ります。出力でレポートされたエラーは、すべて解決する必要があります。

ステップ4: OC4Jインスタンスを構成する

この項のタスクでは、OC4Jインスタンスを構成し、WNAを使用できるようにデプロイ済Webアプリケーションを構成します。これらのタスクを行う前に、OC4Jインスタンスを停止してください。また、すべてのタスクが完了した後に、必ずOC4Jを起動してください。

WNAを使用するためにOC4Jインスタンスを構成するには、次のタスクを行う必要があります。

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

システムのJAZN構成ファイルの編集

Kerberos WNAとActive Directoryの両方のログイン・モジュールをsystem-jazn-data.xmlファイルに追加する必要があります。ログイン・モジュールは、OC4Jに登録済のログイン・モジュールが含まれている<jazn-loginconfig>要素内に追加されます。

Kerberos WNAおよびActive Directoryのログイン・モジュールを追加するには、次のようにします。

  1. ORACLE_HOME/j2ee/home/config/system-jazn-data.xmlを開きます。

  2. 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>
       ...
    
    
  3. JSSOアプリケーションのKerberosログイン・モジュール構成を定義する、次のXMLブロックを追加します。次の値は、それぞれのActive Directory環境にあわせて変更する必要があります。

    • 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>
         ...
      
      
  4. system-jazn-data.xmlファイルを保存して閉じます。

JAZN構成ファイルの編集

JAZN構成ファイルを編集して、WNA認証タイプを登録する必要があります。このファイルにはOC4JのJSSO構成が含まれています。

WNA認証タイプを登録するには、次のようにします。

  1. ORACLE_HOME/j2ee/home/config/jazn.xmlファイルを開きます。

  2. <jazn>要素内に次のプロパティを追加します。

    <jazn>
       ...
       <property name="custom.sso.token.asserter.authtypes"
                 value="WINDOWS-KERBEROS-AUTH"/>
       ...
    <jazn>
    
    
  3. ファイルを保存して閉じます。

アプリケーションのデプロイメント・ディスクリプタの編集

WNA認証を使用するためには、JSSOアプリケーション用Oracleアプリケーション・デプロイメント・ディスクリプタおよびJSSOを使用するすべてのWebアプリケーションを編集する必要があります。

アプリケーションのデプロイメント・ディスクリプタを編集するには、次のようにします。

  1. ORACLE_HOME/j2ee/home/application-deployments/javasso/orion-application.xmlファイルを開きます。

  2. 現在の<jazn>構成をコメント解除します。

  3. 次の<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>
    
    
  4. JSSOアプリケーションのorion-application.xmlファイルを保存して閉じます。

  5. JSSOアプリケーションを使用するそれぞれのWebアプリケーションについて、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にあります。

ステップ5: ブラウザを構成してWNAをテストする

WNAを使用するように構成されているWebアプリケーションにアクセスする前に、クライアントのInternet Explorerのブラウザに、JSSOアプリケーションがデプロイされているホスト名を信頼できるホストとして追加する必要があります。JSSOドメイン内のコンピュータでInternet Explorerが実行されている場合は、Kerberosネゴシエーションが行われます。JSSOドメインの一部でないコンピュータでInternet Explorerが実行されている場合は、フォールバック・ロジックによりBasic認証が使用され、ユーザー名およびパスワードの入力を求められます。ユーザー名およびパスワードは、system-jazn-data.xmlファイルで構成されているActive Directoryに対して認証されます。

ブラウザの設定を構成してWNA機能をテストするには、次の手順を実行します。

  1. Windowsドメインにログインします。

  2. Internet Explorerのブラウザを開きます。

  3. ブラウザの「ツール」メニューから「インターネット オプション」を選択します。「インターネット オプション」ダイアログ・ボックスが表示されます。

  4. 「インターネット オプション」ダイアログ・ボックスの「セキュリティ」タブを選択します。

  5. 「イントラネット」アイコンをクリックして強調表示し、「サイト」をクリックします。「イントラネット」ダイアログ・ボックスが表示されます。

  6. 「イントラネット」ダイアログ・ボックスの「詳細設定」をクリックします。

  7. テキスト・フィールドに、JSSOサーバーをホストするコンピュータのURLを入力します。たとえばhttp://dude.mydomain.comです。JSSOのログイン・ページやポート番号は含めないでください。

  8. 「追加」をクリックします。URLがローカル・イントラネット・ゾーンのWebサイトのリストに追加されます。

  9. 「OK」をクリックし、もう一度「OK」クリックして「イントラネット」ダイアログ・ボックスを閉じます。

  10. 「インターネット オプション」ダイアログ・ボックスの「セキュリティ」タブで「レベルのカスタマイズ」をクリックします。「セキュリティの設定」ダイアログ・ボックスが表示されます。「イントラネット ゾーンでのみ自動的にログオンする」オプションが選択されていることを確認します。

  11. 「OK」をクリックして「セキュリティの設定」ダイアログ・ボックスを閉じます。

  12. 「OK」をクリックして「インターネット オプション」ダイアログ・ボックスを閉じます。

  13. ブラウザの「アドレス」フィールドに次のURLを入力し、JSSOサーバーのログイン・ページに移動します。http://host:port/jsso/SSOLoginhost:portを、JSSOアプリケーションへのアクセスに使用するホストおよびポートに置き換えます。

    ブラウザを介してKerberos資格証明が透過的にJSSOサーバーに渡されるため、JSSOサーバーへのログインが自動的に行われます。最上位ページにリダイレクトされれば、テストは成功です。


戻る 次へ
Oracle
Copyright © 2003, 2008 Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引