ヘッダーをスキップ

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

B50832-01
目次
目次
索引
索引

戻る 次へ

17 Webアプリケーションのセキュリティ構成

この章では、Webアプリケーションに影響するセキュリティの問題について説明します。この章の内容は次のとおりです。

認証方式(auth-method)の指定

この項では、Webアプリケーションに対して認証方式を指定する構成設定について説明します。内容は次のとおりです。

web.xmlでのauth-methodの指定

標準の認証方式をWebアプリケーション・レベルで指定するには、web.xml<login-config>要素と、その<auth-method>サブ要素を使用します。次に例を示します。

<web-app ... >
   ...
   <login-config>
      <auth-method>BASIC</auth-method>
      ...
   </login-config>
   ...
</web-app>

表17-1は、web.xml内の標準的な<auth-method>の設定を示しています。

表17-1    web.xmlでのauth-methodの値 
設定  意味 

BASIC 

アプリケーションではBasic認証が使用されます。 

DIGEST 

アプリケーションではDigest認証が使用されます(外部LDAPプロバイダやカスタム・プロバイダの場合はサポートされません)。  

FORM 

アプリケーションではカスタム・フォームベース認証が使用されます。 

CLIENT-CERT 

アプリケーションでは、クライアントに対してSSL用の独自HTTPS証明書を提供するように要求します。 


注意

  • ファイルベース・プロバイダまたはOracle Identity Managementの場合は、Basic認証よりもセキュアなソリューションとしてDigest認証をお薦めします。

  • DIGESTを、セキュリティ・プロバイダがOracle Identity Managementの場合に使用するには、「Digest認証とOracle Internet Directoryの併用」に説明されている準備手順を実行する必要があります。

  • FORMを使用する場合は、オプションとして、適切なクライアント・サイド・リダイレクトのためのOC4Jフラグを設定できます。詳細は、「フォームベース認証の使用」を参照してください。(この項では、フォームベース認証に対する標準構成についても説明します。)

  • CLIENT-CERTを使用するには、OracleAS JAAS Providerのプロパティmapping.attributeも、「CLIENT-CERT認証の使用」の説明に従って構成する必要があります。

 

関連項目

 

orion-application.xmlでのauth-methodの指定

Oracle固有の認証方式をJ2EEアプリケーション・レベルで指定するには、orion-application.xml<jazn-web-app>要素とそのauth-method属性を使用します。OC4J 10.1.3.1実装でサポートされている設定は、SSO(Oracle Single Sign-Onの場合)、COREIDSSO(Oracle Access Managerシングル・サインオンの場合)、CUSTOM_AUTH(Java SSOを含めたアイデンティティ管理フレームワークを使用する場合)です。これらの機能の詳細は、「Oracle Application Serverシングル・サインオン代替方法の概要」を参照してください。次に示すのは、Oracle Single Sign-Onの場合の例です。

<orion-application ... >
   ...
   <jazn provider="LDAP" >
      <jazn-web-app auth-method="SSO"/>
      ...
   </jazn>
   ...
</orion-application>


注意

  • Application Server Controlを介して構成するSSOの選択肢(Oracle Single Sign-OnおよびJava SSO)に対して、orion-application.xml内で自動的に認証方式が設定されます。

  • 標準の認証方式は、OC4J固有のファイルではなく、前項の「web.xmlでのauth-methodの指定」で説明したように、web.xmlファイル内で構成する必要があります。(これは以前のリリースにおける独自機能といくつかの点で異なっていますが、下位互換性を維持するため、この機能は引き続きサポートされています。)

  • <jazn-web-app>要素は、orion-web.xmlファイルでもサポートされます。競合が発生する場合は、問題のWebアプリケーションに関しては、orion-web.xmlorion-application.xmlよりも優先されます。

  • orion-application.xml(またはorion-web.xml)内のauth-methodの設定は、web.xmlの設定よりも優先されます。

 

関連項目

 

Digest認証モードでのBasic認証のフォールバックの使用

OC4J 10.1.3.1実装のデフォルトの動作として、クライアントからBasic認証ヘッダーが送信された場合でも、Digest認証モジュールではBasic認証が処理されません。(これは、10.1.3.0.0実装のデフォルトの動作とは異なります。)クライアントからBasic認証ヘッダーが送信された場合にBasic認証のフォールバックを有効にするには、次の例のように、orion-application.xml<jazn>要素の<property>サブ要素で、digest.auth.basic.fallbackプロパティをtrueに設定します。(このプロパティのロジックは、10.1.3.0.0実装でのロジックの逆であることに注意してください。)

<jazn provider="XML" location="jazn-data.xml">
   <property name="digest.auth.basic.fallback" value="true" />
   ...
</jazn>

Basic認証のフォールバックを使用しない場合は、このプロパティを設定しないか、または明示的にfalseに設定します。


重要

Application Server Controlを介して任意の時点で任意のアプリケーションに対してファイルベース・プロバイダからOracle Identity Managementに切り替えると、そのアプリケーションのorion-application.xml内にある<jazn>要素が次のように置き換えられます。<jazn>要素の以前の設定はすべて失われるため、設定をやりなおす必要があります。

<jazn provider="LDAP" />
 

フォームベース認証の使用

この項では、標準およびOC4J固有のフォームベース認証の特徴について説明します。

フォームベース認証の標準構成の設定

FORMの設定には、ログイン・ページおよびエラー・ページのURLを指定する追加構成が、web.xml<login-config>要素に必要になります。この機能には、OC4J固有のものはありません。次に例を示します。

<login-config>
   <auth-method>FORM</auth-method>
   ...
   <form-login-config>
      <form-login-page>mylogin.jsp</form-login-page>
      <form-error-page>myerror.jsp</form-error-page>
   </form-login-config>
</login-config>

クライアント・サイド・リダイレクト用OC4Jフラグの設定

OC4Jは、クライアント・サイド・リダイレクト用のoc4j.formauth.redirectプロパティをサポートしています。このプロパティがtrueに設定されている場合は、OC4J起動時にユーザーがフォームベース認証用に資格証明を入力すると、OC4Jによって適切なクライアント・サイド・リダイレクトが実行され、ブラウザにリスト表示されるリクエストURIが変更されます。このプロパティは、次のように設定されます。

-Doc4j.formauth.redirect=true

デフォルト設定は、falseです。

trueに設定すると、ユーザーがユーザーとパスワードを入力して、資格証明が十分とされてフォームベース認証に成功した時点で、保護リソースの内容が表示され、ブラウザに表示されるリクエストURIが、フォームベース認証を起動したURIと同じになります。(フォームベース認証が失敗した場合は、クライアントは前項の「フォームベース認証の標準構成の設定」で説明された構成で指定されたエラー・ページにリダイレクトされます。)

trueに設定しない場合は、任意のフォームベース認証後に、OC4J固有のj_security_checkリクエストURIがブラウザに表示されます。

例として、次のリソースがフォームベース認証で保護されていると想定します。

http://myhost:8888/testapp/SecureServlet

oc4j.formauth.redirect=trueの設定でフォームベース認証が成功した場合は、保護リソースの内容が表示されるときに、前述のSecureServlet URIがブラウザに表示されます。ただし、trueフラグが設定されていない場合は、ブラウザに表示されるリクエストURIは次のようになります。

http://myhost:8888/testapp/j_security_check

CLIENT-CERT認証の使用

この項では、HTTPSを介してクライアント認証を行うためのOC4Jの構成方法、およびこの認証方式に対するOC4Jのロジック・フローについて説明します。


注意

Oracle Single Sign-Onでクライアント証明書を使用する場合は、ここで説明する手順ではなく、『Oracle Application Server Single Sign-On管理者ガイド』で説明されている手順に従ってください。
 


OC4JのCLIENT-CERT認証用構成

HTTPSを介したクライアント認証を使用するには、次の手順を実行します。

  1. 第15章「OC4JとのSSL通信」での説明に従ってSSLを構成します。

  2. web.xml<auth-method>を、CLIENT-CERTに設定します。「web.xmlでのauth-methodの指定」を参照してください。

  3. 必要に応じて、アプリケーションのorion-application.xmlファイルの<jazn>要素に、OC4J mapping.attributeプロパティを設定します。

  4. jazn.comjazn.xmlで指定されるデフォルト・レルム)以外のデフォルト・レルムを使用するには、<jazn>要素のdefault-realm属性を介して指定します。

ファイルベース・プロバイダの場合、mapping.attributeのデフォルト値はCNです。Oracle Identity Management(LDAPベース・プロバイダ)または外部LDAPプロバイダの場合、デフォルト値はDNです。次に例を示します。ファイルベース・プロバイダに対してCNを明示的に設定し、デフォルト・レルムも指定しています。

<orion-application ... >
   ...
   <jazn provider="XML" ... default-realm="myrealm" ... >
      <property name="mapping.attribute" value="CN"/>
      ...
   </jazn>
   ...
</orion-application>


重要

  • スタンドアロンOC4J(Oracle HTTP Serverなし)でCLIENT-CERT認証モードを使用するには、secure-web-site.xml<ssl-config>要素でneeds-client-auth="true"を設定する必要があります。この属性については、「secure-web-site.xmlにおけるオプションの手順」を参照してください。

  • Application Server Controlを介して任意の時点で任意のアプリケーションに対してファイルベース・プロバイダからOracle Identity Managementに切り替えると、そのアプリケーションのorion-application.xml内にある<jazn>要素が次のように置き換えられます。<jazn>要素の以前の設定はすべて失われるため、設定をやりなおす必要があります。

    <jazn provider="LDAP" />
    
 

OC4JにおけるCLIENT-CERT実行フロー

次に、OC4JにおけるCLIENT-CERT認証手順を示します。

  1. ユーザーが保護リソースへのアクセスを試行します。

  2. OracleAS JAAS Providerは、証明書ユーザーの識別名を証明書から取得します。

  3. mapping.attributeの値に従って、OracleAS JAAS Providerは証明書ユーザーの識別名から適切な値を取得します。たとえば、属性の設定がCNの場合、OracleAS JAAS Providerは識別名から一般名を取得します。

  4. OracleAS JAAS Providerは、該当するユーザー・リポジトリ(ファイルベース・プロバイダの場合はjazn-data.xml、LDAPベース・プロバイダの場合はOracle Internet Directoryなど)から、証明書ユーザーを検索します。検索フィルタは、mapping.attributeの設定によって決定されます。たとえば、属性の設定がCNの場合、一般名がユーザー・リポジトリ内の検索フィルタとなります。

    ただし、正確な動作は、ファイルベース・プロバイダとLDAPベース・プロバイダまたは外部LDAPプロバイダで異なる点に注意してください。たとえば、一般名がjohndoeの場合、それぞれの動作は次のようになります。

    • ファイルベース・プロバイダの場合は、OracleAS JAAS Providerは、リポジトリからjohndoeを検索します。

    • LDAPベース・プロバイダまたは外部LDAPプロバイダの場合は、OracleAS JAAS Providerは、リポジトリからcn=johndoeを検索します。

  5. OracleAS JAAS Providerは、資格証明プリンシパルおよび付与されるロールをロードし、この情報をSubjectインスタンスに移入します。

  6. 認証がサブジェクトに対して実行されます。

Webアプリケーションのセキュリティ・ロールおよび制約の構成

この項では、ロール・タイプとロール・タイプ間のマッピング方法について説明します。

J2EEロールおよびセキュリティ制約の構成

J2EEには、移植可能なセキュリティ・ロールの機能が組み込まれています。この機能は、サーブレットとJavaServer Pagesに対して、標準のデプロイメント・ディスクリプタweb.xml内に定義されています。これらのJ2EEロールは、アプリケーションに対する一連のリソース・アクセス権を定義する際に使用されます。たとえば、sr_developersというJ2EEロールをweb.xmlで構成するとします。そのためには、<security-role>要素(トップ・レベルの<web-app>要素のサブ要素)を使用します。

<web-app>
   ...
   <security-role>
      <role-name>sr_developers</role-name>
   </security-role>
   ...
</web-app>
 

また、sr_developersロールのアクセス権もweb.xmlで定義します。ロールは、追加の標準ディスクリプタ要素を介して(たとえば、<web-app>のサブ要素でもある<security-constraint>要素下で)、機能および制約に関連付けられます。

<web-app>
   ...
   <security-constraint>
      <web-resource-collection>
         <web-resource-name>access to the entire application</web-resource-name>
         <url-pattern>/*</url-pattern>
      </web-resource-collection>
      <!-- authorization -->
      <auth-constraint>
         <role-name>sr_developers</role-name>
      </auth-constraint>
   </security-constraint>
   ...
</web-app>

J2EEロールへのアプリケーション・ロールのリンク

プリンシパルまたはアプリケーション・コードで定義した論理ロールをJ2EEロールに関連付けると、J2EEロールの定義済アクセス権が、そのプリンシパルまたはアプリケーション論理ロールに割り当てられます。この作業はweb.xmlファイルで行うため、ロール定義を変更する際にアプリケーション・コードを更新する必要はありません。アプリケーション・ロールをJ2EEロールにリンクするには、<security-role-ref>要素(<servlet>要素のサブ要素)を使用します。

<web-app>
   ...
   <servlet>
      ...
      <security-role-ref>
         <role-name>ar_developers</role-name>
         <role-link>sr_developers</role-link>
      </security-role-ref>
      ...
   </servlet>
   ...
</web-app>

<role-name>要素は、アプリケーション・コードにおけるロールを意味しています。<role-link>要素は、このアプリケーション・ロール(ar_developers)を、<security-role>要素で定義したJ2EEロール(sr_developers)にリンクすることを指定します。

この例では、sr_developersに属するユーザーとして動作しているサーブレットがHttpServletRequestメソッドisUserInRole("ar_developers")を起動すると、メソッドはtrueを戻します。


注意

コンテナは、特定のセキュリティ・ロールと一致する<security-role-ref>要素を検出できない場合、アプリケーションのセキュリティ・ロールのリスト全体に対して常に<role-name>の値をチェックします。 


デプロイ・ロールおよびユーザーの定義

デプロイ・ロールおよびユーザーは、使用するセキュリティ・プロバイダで定義されます。たとえばファイルベース・プロバイダの場合、デプロイ・ユーザーおよびロールは、system-jazn-data.xmlファイル(またはオプションとして、ユーザー提供のjazn-data.xmlファイル)で定義されます。

次の例では、developersデプロイ・ロールを構成しています。

<jazn-data>
   ...
   <jazn-realm>
      ...
      <realm>
         ...
         <roles>
            ...
            <role>
               <name>developers</name>
               <members>
                  <member>
                     <type>user</type>
                     <name>john</name>
                  </member>
               </members>
            </role>
            ...
         </roles>
         ...
      </realm>
      ...
   </jazn-realm>
   ...
</jazn-data>

Webアプリケーションに対するrun-asセキュリティ・アイデンティティの指定

Webコンテナで、そのコンテナが認識していないユーザーへのアクセスを許可しなければならない場合があります。このような場合は、標準のWebアプリケーション・ディスクリプタで<run-as>設定を宣言し、アクセスが許可されるロールを指定できます。

<servlet>
   ...
   <run-as>
      <role-name>sr_developers</role-name>
   </run-as>
   ...
</servlet>

ロール名は、Webアプリケーションに対してすでに定義されているロールにしてください。Webコンテナは、すべてのコールについて指定されたアイデンティティをサーブレットからEJBレイヤーに伝播する必要があります。

関連項目

 

OC4JによるJ2EEロールのデプロイ・ロールへのマッピング

OC4Jを使用すると、web.xmlファイルに定義されているJ2EEロールを、セキュリティ・プロバイダのデプロイ・ロールにマップできます。これは、デプロイ時にApplication Server Controlを介して行います。「Application Server Controlを介したセキュリティ・ロール・マッピングの指定」を参照してください。マッピングは、<security-role-mapping>の設定に反映されます。これは、J2EEアプリケーションの場合はorion-application.xmlファイルに、単一のWebアプリケーションの場合はorion-web.xmlファイルにあります。orion-application.xmlでは、<security-role-mapping>がトップ・レベルの<orion-application>要素のサブ要素となります。同様にorion-web.xmlでは、これがトップ・レベルの<orion-web-app>要素のサブ要素となります。

<security-role-mapping>要素内の<group>サブ要素は、セキュリティ・プロバイダのロールに対応します。

次に示すorion-application.xmlの構成では、J2EEロールsr_developersweb.xmlで定義)がデプロイ・ロールdevelopers(たとえばファイルベース・プロバイダのsystem-jazn-data.xmlで定義)にマップされています。

<orion-application>
   ...
   <security-role-mapping name="sr_developers">
      <group name="developers" />
   </security-role-mapping>
   ...
</orion-appliction>

この関連付けにより、web.xml内でsr_developersロールに対してアクセス可能と構成されているリソースに、developersロールがアクセスできるようになります。

たとえば、developersロールのメンバーであるユーザーjohnについて考えてみます。このロールはJ2EEロールsr_developersにマップされているため、johnは、sr_developersロールからアクセス可能なアプリケーション・リソースにアクセスできます。


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

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