ヘッダーをスキップ

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

B50832-01
目次
目次
索引
索引

戻る 次へ

20 リソース・アダプタのセキュリティ・サポート

この章では、Enterprise Information System(EIS)接続にリソース・アダプタを使用するときの、セキュリティ上の注意事項とセキュリティおよび認証の構成方法について説明します。
内容は次のとおりです。

EIS接続のセキュリティおよび認証設定の概要

J2EEアプリケーションとEIS間での通信の安全を保証するため、J2EE Connector Architectureでは、アプリケーション・コンポーネントが、EISへの確立済接続にJAASサブジェクトを関連付けできるようになっています。これを実現できるようにするため、J2EE Connector Architectureのセキュリティ規約は、標準のJAASでも使用できるようになっています。次の各項で、概要を示します。

J2EE Connector Architectureのセキュリティ規約の概要

J2EE Connector Architectureのセキュリティ規約は、アプリケーション・サーバーとリソース・アダプタ間のものであり、接続管理規約を安全な接続に関する機能で拡張したものです。このセキュリティ規約は、標準のJAASインタフェースをサポート対象としているため、特定のセキュリティ・フレームワークまたはメカニズムに依存しないようになっています。具体的には、このセキュリティ規約には次の機能が含まれています。

このセキュリティ規約のサポート対象となる具体的な認証メカニズムは、次の2つです。

セキュリティ規約にある機能で使用される主要インタフェースは、次のとおりです。

コンポーネント管理サインオンとコンテナ管理サインオンの比較概要

J2EEアプリケーションからEISへのサインオンは、アプリケーション・コンポーネントまたはJ2EEコンテナ(OC4J)によって管理できます。コンポーネント管理サインオンはプログラムで設定する必要があり、OC4J固有の構成を伴いません。コンテナ管理サインオンは、プログラミングの必要のない、OC4J固有の構成を使用した宣言的な方法か、またはOC4J固有の構成とプログラミングを組み合せたプログラム的な方法により、設定できます。プログラムによるコンテナ管理サインオンでは、プリンシパル・マッピング・クラスまたはJAASログイン・モジュールを使用できます。

次のリストは、コンポーネント管理サインオンとコンテナ管理サインオンに必要な設定のオプションとタイプをまとめたものです。各レベルの箇条書き記号は選択肢を表します。

OC4Jのコンテナ管理サインオン用の選択肢は、次のように図20-1にも図解されています。

図20-1    OC4Jのコンテナ管理サインオン用の選択フロー・チャート


画像の説明

セキュリティ関連リソース・アダプタ構成要素の概要

この項では、次の主要リソース・アダプタのセキュリティ構成要素について説明します。

oc4j-ra.xmlファイルの<security-config>要素

oc4j-ra.xmlディスクリプタにより、OC4J固有のデプロイ情報(JNDIパス名とコネクタ・プロパティ)がリソース・アダプタに提供されます。oc4j-ra.xmlには、各リソース・アダプタ用に、構成パラメータ値のセットに対応するJNDI名を指定する1つ以上の<connector-factory>要素が含まれています。OC4Jでは、各接続をConnectionFactoryインスタンスとして、適正なJNDIネームスペース・ロケーションにバインドします。

<connector-factory>要素には、EISにユーザー名とパスワードを供給する方法を記述した<security-config> 要素(オプション)を含めることができます。

<security-config>要素には、コンテナ管理サインオンのユーザー名とパスワードを指定します。

oc4j-ra.xmlファイルの<security-config>要素にこの情報を指定する方法は、2つあります。

認証問題の詳細は、「コンテナ管理サインオンでの認証」を参照してください。ここでは、<security-config>要素の構文についてのみ説明します。

<security-config>要素には、次のいずれかを含めます。

oc4j-connectors.xmlファイルの<security-permission>要素

oc4j-connectors.xmlディスクリプタには、アプリケーションに埋め込まれているリソース・アダプタのみでなく、このOC4Jインスタンスにデプロイされているスタンドアロン・リソース・アダプタもリストします。このディスクリプタには、コネクタごとに、コネクタの名前とパス名を指定する<connector>要素を含めます。各<connector>要素には、各リソース・アダプタに付与されたパーミッションを定義する<security-permission>要素を含めます。次に構文を示します。

<security-permission enabled="booleanvalue">

この要素には、各リソース・アダプタに付与するパーミッションを指定します。各<security-permission>要素には、Java 2セキュリティ・ポリシー・ファイル構文に準拠した<security-permission-spec>設定を含めます。

OC4Jでは、ra.xmlファイルの各<security-permission>要素に対して、oc4j-connectors.xmlファイルに<security-permission>要素を自動的に生成します。生成された各要素では、enabled属性がfalseに設定されています。enabled属性をtrueに設定すると、指定したパーミッションが付与されます。

<oc4j-connectors> 
  <connector name="myEIS" path="eis.rar"> 
  . . . 
    <security-permission>
      <security-permission-spec enabled="false">
        grant {permission java.lang.RuntimePermission "LoadLibrary", *'};
      </security-permission-spec>
    </security-permission>
  </connector> 
</oc4j-connectors> 

コンポーネント管理サインオンの概要

EISへの自身のサインオンを管理するアプリケーションをデプロイする場合は、該当するディスクリプタ・ファイル(Webコンポーネントの場合はweb.xml、EJBコンポーネントの場合はejb-jar.xml)の<res-auth>Applicationに設定します。これにより、このアプリケーション・コンポーネントは、サインオンに対して明示的なセキュリティ情報を提供する必要が出てきます。次に例を示します。

          <resource-ref>
             <res-ref-name>...</res-ref-name>
             <res-type>...</res-type>
             <res-auth>Application</res-auth>
             <res-sharing-scope>...</res-sharing-scope>
          </resource-ref>

コンポーネント管理サインオンには、OC4J固有の構成は不要です。

図20-2に、コンポーネント管理サインオンの手順を示します。その後に詳細を示すテキストが続きます。

図20-2    コンポーネント管理サインオン


画像の説明

  1. クライアントがリクエストを行い、このリクエストが、開始プリンシパルの受信サブジェクト(セキュリティ・コンテキスト)に関連付けられます。

  2. アプリケーション・コンポーネントでは、リクエスト処理の一環として、リソース・プリンシパルの送信サブジェクトに受信サブジェクトをマップするか送信サブジェクトをハードコーディングし、その送信サブジェクトを使用してEISへの接続をリクエストします。

  3. 接続取得の一環として、リソース・アダプタは、アプリケーション・コンポーネントから提供された送信サブジェクトを使用して、EISにサインオンします。

  4. 接続が取得されると、アプリケーション・コンポーネントは、確立された送信サブジェクトのもとでEISと対話できます。

次の例は、コンポーネント管理サインオンを実行するアプリケーションの抜粋です。

Context initctx = new InitialContext();
// Perform JNDI lookup to obtain a connection factory.
javax.resource.cci.ConnectionFactory cxf =
                   (javax.resource.cci.ConnectionFactory)initctx.lookup
                                                     ("java:com/env/eis/MyEIS");
// Assume a custom class ConnectionSpecImpl, used to store sign-on credentials.
com.myeis.ConnectionSpecImpl connSpec = ...
connSpec.setUserName("EISuser");
connSpec.setPassword("EISpassword");
// Pass sign-on credentials through getConnection() method call.
javax.resource.cci.Connection cx = cxf.getConnection(connSpec);

コンテナ管理サインオンの概要

OC4Jを使用してEISへのサインオンを管理するアプリケーションをデプロイする場合は、該当するディスクリプタ・ファイル(Webコンポーネントの場合はweb.xml、EJBコンポーネントの場合はejb-jar.xml)の<res-auth>Containerに設定します。これにより、OC4Jは、サインオンに対してセキュリティ情報を提供する必要が出てきます。次に例を示します。

          <resource-ref>
             <res-ref-name>...</res-ref-name>
             <res-type>...</res-type>
             <res-auth>Container</res-auth>
             <res-sharing-scope>...</res-sharing-scope>
          </resource-ref>

宣言的コンテナ管理サインオンの場合、OC4Jでは、Application Server Controlを介して指定された構成情報を使用します(「宣言的コンテナ管理サインオンの使用」を参照)。プログラムによるコンテナ管理サインオン(プリンシパル・マッピング・クラスまたはJAASログイン・モジュールのいずれを使用するかを問わない)の場合、OC4Jでは、oc4j-ra.xmlファイルに直接指定された構成情報を使用します。アプリケーションで接続を取得しようとすると、OC4Jでは、該当するメカニズムを使用して送信サブジェクトを確認し、認証を実行します。

図20-3に、コンテナ管理サインオンの手順を示します。この手順の詳細はこの図の後に記載されています。

図20-3    コンテナ管理サインオン


画像の説明

  1. クライアントがリクエストを行い、このリクエストが、開始プリンシパルの受信サブジェクト(セキュリティ・コンテキスト)に関連付けられます。

  2. アプリケーション・コンポーネントでは、リクエスト処理の一環としてEISへの接続をリクエストします。

  3. 接続取得の一環として、コンテナ(図に示すOC4Jセキュリティ・コンテキスト・マネージャ)は、リソース・プリンシパルの送信サブジェクトに受信サブジェクトをマップします。これは、プリンシパル・マッピング・エントリ要素、プリンシパル・マッピング・クラスまたはJAASログイン・モジュールに基づいて行われます。

  4. リソース・アダプタでは、OC4Jから提供された送信サブジェクトを使用してEISにログインします。

  5. 接続が取得されると、アプリケーション・コンポーネントは、確立された送信サブジェクトのもとでEISと対話できます。

次の例は、コンテナ管理サインオンを使用するアプリケーションの抜粋です。

Context initctx = new InitialContext();

// perform JNDI lookup to obtain a connection factory
javax.resource.cci.ConnectionFactory cxf =
 (javax.resource.cci.ConnectionFactory)initctx.lookup("java:com/env/eis/MyEIS");
// For container-managed sign-on, no security information is passed in the
// getConnection call
javax.resource.cci.Connection cx = cxf.getConnection();

コンテナ管理サインオンでの認証

コンテナ管理サインオンを使用する場合、OC4Jではリソース・プリンシパルとその資格証明をEISに提供する必要があります。プリンシパルと資格証明は、次のいずれかの方法で取得できます。

OC4Jでは、これらの方法をすべてサポートするため、JAAS Pluggable Authentication、ユーザー作成認証クラスまたはoc4j-ra.xmlファイルの該当する設定が使用されます。

宣言的コンテナ管理サインオンの使用

この項では、プリンシパル・マッピング・エントリのOC4J固有構成を介して認証を設定する方法について説明します。これを(「プログラムによるコンテナ管理サインオン」に対して)「宣言的コンテナ管理サインオン」と呼びます。Application Server Controlを介してこの構成ができます。

プリンシパル・マッピング・エントリのセットとデフォルトのリソース・ユーザーを指定します。各プリンシパル・マッピング・エントリには、開始プリンシパルと対応するリソース・プリンシパルを指定します。プログラム実行時における実際の開始プリンシパル(OC4Jユーザー)が、指定された開始プリンシパルのいずれかと一致する場合は、対応するリソース・プリンシパルがEISへのサインオンに使用されます。実際の開始プリンシパルが指定されたいずれの開始プリンシパルとも一致しない場合は、EISへのサインオンにはデフォルトのリソース・ユーザーが使用されます(提供または定義されたものがある場合)。デフォルトのリソース・ユーザーが指定されていない場合は、EISにはnullサブジェクトが渡されます。この場合、EISには、EIS独自のデフォルトでサインオンするオプションがあります。

Application Server Controlコンソールで次の手順に従います。


注意

スタンドアロン・リソース・アダプタ用の「リソース・アダプタ」ページにナビゲートする手順は次のとおりです。

  1. OC4Jホームページで「アプリケーション」タブを選択します。

  2. 「スタンドアロン・リソース・アダプタ」を表示します。

  3. 目的のリソース・アダプタを選択します。

アプリケーションとともにデプロイされるリソース・アダプタ用の「リソース・アダプタ」ページにナビゲートする手順は次のとおりです。

  1. OC4Jホームページで「アプリケーション」タブを選択します。

  2. 「アプリケーション」を表示します。

  3. 目的のアプリケーションを選択します。

  4. 表示されるアプリケーションのホームページの「モジュール」で、目的のリソース・アダプタを選択します。

 

  1. 目的の「リソース・アダプタ」ページの「コネクション・ファクトリ」タブから、編集するコネクション・ファクトリを選択します。コネクション・ファクトリがJNDIロケーションごとに一覧表示されます。

  2. 「コネクション・ファクトリの編集」ページで、「セキュリティ」タブを選択します。

  3. コンテナ管理サインオンのセキュリティを有効にします。

  4. 宣言的プリンシパル・マッピングを指定します。これはデフォルトのリソース・ユーザーを指定するためです。

    1. デフォルトのリソース・ユーザー名を指定します。

    2. デフォルト・リソース・ユーザーのパスワードを指定します。これは、間接パスワードで行うか、またはクリアテキストで希望のパスワードを入力して行います。間接パスワードの場合は、キー(たとえば、単なるユーザー名でもかまいません)を指定します。OC4Jでは、このキーを使用してセキュリティ・プロバイダで(たとえば、system-jazn-data.xmlファイルを介して)検索を実行します。

  5. 開始ユーザー・マッピングを指定します。リソース・プリンシパルにマップする開始プリンシパルごとにマッピングを指定します。既存の行を編集することも、既存のマッピングを変更することも、別の行を追加して新規マッピングを指定することもできます。マッピングごとに、次の手順を実行します。

    1. 開始ユーザー、つまり開始プリンシパルのユーザー名を指定します。

    2. リソース・ユーザー、つまり対応するリソース・プリンシパルのユーザー名を指定します。

    3. リソース・パスワード、つまりマップされたリソース・プリンシパルのパスワードを指定します。デフォルトのプリンシパル・マッピングの場合と同様、これは、間接パスワードで行うかまたは直接パスワードを入力して行います。

  6. 「適用」を選択して変更を適用します。

表20-1に、oc4j-ra.xmlファイルでのこれらの設定とXMLエンティティの対応関係を示します。表の後に例を示します。

表20-1    宣言的コンテナ管理サインオンのプロパティ 
Application Server Controlプロパティ  対応するXMLエンティティ  説明 

コンテナ管理のサインオンのセキュリティ有効化 

<security-config>要素の
use属性 

有効化はuse="principal-mapping-entries"に対応します(宣言的コンテナ管理サインオンを想定)。無効化はuse="none"に対応します。 

デフォルト・リソース・ユーザー 

<default-mapping>の<res-user>サブ要素 

デフォルト・リソース・プリンシパルのユーザー名。  

「間接パスワード」または「パスワード」(「宣言的プリンシパル・マッピング」の場合) 

<default-mapping>の<res-password>サブ要素 

デフォルト・リソース・プリンシパルのパスワード。間接的または直接的に指定します。 

開始ユーザー 

<principal-mapping-entry>の<initiating-user>サブ要素 

リソース・プリンシパルにマップする開始プリンシパルのユーザー名。これは単純なユーザー名でも、レルム名とスラッシュの付いたユーザー名でもかまいません。 

リソース・ユーザー 

<principal-mapping-entry>の<res-user>サブ要素 

開始プリンシパルにマップするリソース・プリンシパルのユーザー名。開始ユーザーとリソース・ユーザーのペアごとに、独立した<principal-mapping-entry>要素を使用します。 

リソース・パスワード 

<principal-mapping-entry>の<res-password>サブ要素 

リソース・プリンシパルのパスワード。間接的または直接的に指定します。 

<oc4j-connector-factories ... >
   <connector-factory ... >
      ...
      <security-config use="principal-mapping-entries">
         <principal-mapping-entries>
            <default-mapping>
               <res-user>scott</res-user>
               <res-password>->tiger</res-password>
            </default-mapping>
            <principal-mapping-entry>
               <initiating-user>servletuser1</initiating-user>
               <res-user>jmsuser1</res-user>
               <res-password>->jmsuser1</res-password>
            </principal-mapping-entry>
            <principal-mapping-entry>
               <initiating-user>servletuser2</initiating-user>
               <res-user>jmsuser2</res-user>
               <res-password>->jmsuser2</res-password>
            </principal-mapping-entry>
         </principal-mapping-entries>
      </security-config>
   </connector-factory>
   ...
</oc4j-connector-factories>


注意

このリリースでは、開始ユーザーの名前は、<initiating-user>要素に、単純な名前(scott)またはスラッシュで区切られたレルム名とユーザー名のペア(myRealm/scott)として指定できます。ユーザー名は、有効なOracleAS JAAS Providerユーザーにしてください。

いずれの場合も、OracleAS JAAS Providerデフォルト・レルムを指定する必要があります。「ファイルベースのプロバイダまたはOracle Identity Managementのデフォルト・レルム」を参照してください。単純なユーザー名を指定する場合、その名前はデフォルト・レルムのメンバーである必要があります。 


プログラム的コンテナ管理サインオンの使用

OC4Jでは、プリンシパル・マッピング・クラスを使用するOC4J固有のメカニズムを介して、またはJAASログイン・モジュールを使用するプラッガブルJAASメカニズムを介して、プログラムによる認証を管理できます。以降の各項では、このメカニズムに加えて追加機能についても説明します。

プリンシパル・マッピング・クラスの使用

プログラムによるコンテナ管理サインオンに対するOC4Jでのオプションの1つは、プリンシパル・マッピングを実装するOracle機能を使用することです。アプリケーションには、oracle.j2ee.connector.PrincipalMappingインタフェースを実装したクラスであるプリンシパル・マッピング・クラスを組み込む必要があります。開発者はこれを行うために、直接このインタフェースを実装しても、または便宜上Oracleによって提供されているoracle.j2ee.connector.AbstractPrincipalMappingクラスを拡張してもかまいません。oc4j-ra.xmlファイルを介してプリンシパル・マッピング・クラスを構成します。ここでは、プリンシパル・マッピング・クラスの様々な使用方法について説明します。

プリンシパル・マッピング・インタフェースAPIの概要

表20-2に、PrincipalMappingインタフェースのメソッドのOC4Jにおける使用方法について説明します。

表20-2    プリンシパル・マッピング・インタフェースのメソッドの説明 
メソッド・シグネチャ  OC4Jにおける使用方法 

void init (java.util.Properties prop) 

OC4Jではinit()をコールしてPrincipalMappingインスタンスの設定を初期化し、oc4j-ra.xmlファイルの<principal-mapping-interface>要素に指定されたプロパティ値に渡します。(「プリンシパル・マッピング・クラスの構成」を参照してください。)実装クラスでは、これらのプロパティを使用して、デフォルトのユーザー名およびパスワード、LDAP接続の情報またはデフォルト・マッピングを設定できます。  

void setManagedConnectionFactory (ManagedConnectionFactory mcf) 

OC4JではsetManagedConnectionFactory()をコールして、PrincipalMappingインスタンスにManagedConnectionFactoryインスタンス(EISへの接続の場合)を供給し、それがPasswordCredentialインスタンスの作成時に使用されます。 

void setAuthenticationMechanisms (java.util.Map authMechanisms) 

OC4JではsetAuthenticationMechanisms()をコールして、リソース・アダプタによってサポートされている認証メカニズムをPrincipalMappingインスタンスに渡します。渡されるマップ内のキーは、サポートされているメカニズム・タイプ("BasicPassword""Kerbv5"など)を含んだ文字列です。このキーに対応する値は、ra.xmlファイルの<credential-interface>要素に宣言されるような、対応する資格証明インタフェース(たとえば、PasswordCredentialインタフェース)の完全修飾名を含んだ文字列です。リソース・アダプタで複数の認証メカニズムがサポートされる場合は、マップに複数のエントリを含めることができます。  

Subject mapping (Subject initiatingSubject) 

OC4Jではmapping()をコールして、PrincipalMappingインスタンスにプリンシパル・マッピングを実行するよう指示します。OC4Jユーザー(開始プリンシパル)用のSubjectインスタンスが渡され、このメソッドにより、リソース・プリンシパル用のSubjectインスタンスが、リソース・アダプタによるEISへのサインオン用に戻されます。(適切なリソース・プリンシパルが見つからなかった場合は、この実装によりnullが戻されます。) 

AbstractPrincipalMappingクラスの拡張

OC4Jでは、PrincipalMappingインタフェースを実装する抽象クラスAbstractPrincipalMappingが、便宜上用意されています。このクラスには、setManagedConnectionFactory()およびsetAuthenticationMechanism()メソッドのデフォルト実装の他、次を行えるユーティリティ・メソッドが含まれています。

AbstractPrincipalMappingクラスを拡張する場合、開発者はinit()およびmapping()メソッドを実装するのみで済みます。

AbstractPrincipalMappingクラスによって公開されるメソッドを次の表20-3にまとめます。

表20-3    AbstractPrincipalMappingクラスのメソッドの説明 
メソッド・シグネチャ  説明 

abstract void init
(java.util.Properties prop) 

サブクラスでは、init()メソッドを実装する必要があります。詳細は表20-2を参照してください。 

void setManagedConnectionFactory (ManagedConnectionFactory mcf) 

サブクラスでは、setManagedConnectionFactory()メソッドを実装する必要がありません。詳細は表20-2を参照してください。  

void setAuthenticationMechanisms
(java.util.Map authMechanisms) 

サブクラスでは、setAuthenticationMechanisms()メソッドを実装する必要がありません。詳細は表20-2を参照してください。なお、サブクラスでは、isBasicPasswordSupported()およびisKerbv5Supported()メソッド(この表で後述)を使用して、どの認証メカニズムがリソース・アダプタによってサポートされているかを判別できます。また、このサブクラスではgetAuthenticationMechanisms()を使用して認証メカニズムを取得することもできます。  

abstract Subject mapping
(Subject initiatingSubject) 

サブクラスでは、mapping()メソッドを実装する必要があります。詳細は表20-2を参照してください。 

ManagedConnectionFactory getManagedConnectionFactory () 

getManagedConnectionFactory()ユーティリティ・メソッドではManagedConnectionFactoryインスタンス(EISへの接続用)を戻しますが、PasswordCredentialインスタンスの作成にこれが必要な場合があります。  

java.util.Map getAuthenticationMechanisms () 

getAuthenticationMechanisms()ユーティリティ・メソッドでは、リソース・アダプタによってサポートされているすべての認証メカニズムのマップを戻します。マップの詳細は、表20-2setManagedConnectionFactory()を参照してください。 

boolean isBasicPasswordSupported () 

isBasicPasswordSupported()ユーティリティ・メソッドでは、リソース・アダプタによってパスワード付きのBasic認証メカニズムがサポートされているかどうかを判別します。  

boolean isKerbv5Supported () 

isKerbv5Supported()ユーティリティ・メソッドでは、リソース・アダプタによってKerbv5認証メカニズムがサポートされているかどうかを判別します。  

Principal getPrincipal (Subject) 

getPrincipal()ユーティリティ・メソッドでは、OC4Jから渡されたOC4JのユーザーSubjectインスタンスからPrincipalインスタンスを抽出します。

注意: サブジェクト内に複数のプリンシパルがある場合、このメソッドでは最初のプリンシパルを取得します。(getPrincipals()メソッドもあります。最初のプリンシパルが、このメソッドによって戻されるプリンシパル・コレクションの最初の要素です。) 

例20-1では、AbstractPrincipalMappingクラスを拡張して、OC4JユーザーからEISのデフォルトのユーザーおよびパスワードにプリンシパル・マッピングを行います。これは、デフォルトのユーザーおよびパスワードがoc4j-ra.xmlファイルの<principal-mapping-interface>要素に指定されているものと想定しています(「プリンシパル・マッピング・クラスの構成」を参照)。

例20-1    AbstractPrincipalMappingの拡張

package com.example.app;

import java.util.*;
import javax.resource.spi.*;
import javax.resource.spi.security.*;
import oracle.j2ee.connector.AbstractPrincipalMapping;
import javax.security.auth.*;
import java.security.*;

public class MyMapping extends AbstractPrincipalMapping
{
  String m_defaultUser;
  String m_defaultPassword;

  public void init(Properties prop)
  {
    if (prop != null)
    {
      // Retrieves the default user and password from the properties
      m_defaultUser = prop.getProperty("user");
      m_defaultPassword = prop.getProperty("password");
    }
  }
  public Subject mapping(Subject initiatingSubject)
  {
    // This implementation is for BasicPassword authentication
    // mechanism. Return if the resource adapter does not support it.
    if (!isBasicPasswordSupported())
      return null;
    // Use the utility method to retrieve the Principal from the incoming Subject
    // (security context), corresponding to the OC4J user. 
    // This code is included here only as an example.
    // The principal obtained is not actually used in this example.
    Principal principal = getPrincipal(initiatingSubject);
    char[] resPasswordArray = null;    
    if (m_defaultPassword != null)
      resPasswordArray = m_defaultPassword.toCharArray();
    // Create a PasswordCredential using the default user name and
    // password, and add it to the Subject, as in "Option A" in the
    // J2EE Connector Architecture specification.
    PasswordCredential cred =
      new PasswordCredential(m_defaultUser, resPasswordArray);
    cred.setManagedConnectionFactory(getManagedConnectionFactory());
    initiatingSubject.getPrivateCredentials().add(cred);
    return initiatingSubject;
  }
}

プリンシパル・マッピング・クラスの構成

プリンシパル・マッピング・クラスを使用するには、oc4j-ra.xmlを更新してクラス用に<principal-mapping-interface>要素を追加する必要があります。これは<security-config>要素のサブ要素で、次のものを含める必要があります。

EIS接続でのJAASログイン・モジュールの使用

JAASを介してEISへのサインオンをプログラムにより管理することもできます。

関連項目

 

OC4Jには、Connector Architecture仕様に準拠するJAAS Pluggable Authenticationフレームワークが用意されています。このフレームワークにより、アプリケーション・サーバーとその基礎となる認証サービスは相互に独立した状態を維持し、アプリケーション・サーバーに変更を加えずに、新規認証サービスをプラグインできます。

認証サービスでは、次のいずれかのタイプのJAASログイン・モジュールを使用してリソース・プリンシパルと資格証明を取得できます。

ログイン・モジュールは、カスタマ、EISベンダーまたはリソース・アダプタ・ベンダーが提供できます。ログイン・モジュールは、javax.security.auth.spi.LoginModuleインタフェースを実装します。

OC4Jでは、公開証明書を格納するjavax.security.auth.Subjectクラスのインスタンス、およびOC4Jユーザーを表すoracle.j2ee.connector.InitiatingPrincipalインスタンスを渡すことで、ログイン・モジュールに開始ユーザー・サブジェクトを提供します。認証されたユーザーがない場合、つまり、匿名ユーザーがある場合、OC4Jではnullサブジェクトを渡すことができます。ログイン・モジュールのログイン・メソッドは、開始ユーザーに基づいて、対応するリソース・プリンシパルを検索して、そのリソース・プリンシパル用に新規のPasswordCredentialまたはGenericCredentialインスタンスを作成する必要があります。これにより、リソース・プリンシパルおよび資格証明オブジェクトが、commit()メソッドの開始Subjectインスタンスに追加されます。リソース資格証明は、リソース・アダプタによって提供されるjavax.resource.spi.ManagedConnectionFactory実装のcreateManagedConnection()メソッドに渡されます。nullのSubjectインスタンスが渡された場合、ログイン・モジュールは、リソース・プリンシパルとそれに対応する資格証明を含んだ新規のSubjectインスタンスを作成する必要があります。

InitiatingPrincipalおよびInitiatingGroupクラス

oracle.j2ee.connector.InitiatingPrincipalクラスは、ログイン・モジュールのOC4Jユーザーを表します。OC4Jでは、InitiatingPrincipalのインスタンスを作成してサブジェクトに組み込みます。このサブジェクトはログイン・モジュールのinitialize()メソッドに渡されます。InitiatingPrincipalクラスは、java.security.Principalインタフェースの実装にgetGroups()メソッドが追加されたものです。

また、oracle.j2ee.connector.InitiatingGroupクラスはPrincipalインタフェースの実装ですが、OC4Jロールを表します。OC4Jでは、InitiatingPrincipalインスタンスを作成してサブジェクトに組み入れます。このサブジェクトは、ログイン・モジュールのinitialize()メソッド、またはプリンシパル・マッピング・クラスのmapping()メソッドに渡されます。また、InitiatingPrincipalクラスには、getGroups()メソッドも含まれています。

getGroups()メソッドでは、InitiatingGroupオブジェクトのセット(java.util.Setインスタンス)を戻します。これはOC4JのロールまたはこのOC4JユーザーのOracleAS JAAS Providerロールを表します。ロール・メンバーシップは、OC4J固有のディスクリプタ・ファイル(通常、system-jazn-data.xml)に定義されます。

ログイン・モジュールでは、getGroups()を使用してOC4JロールとEISユーザー間でマッピングを行えます。Principalインタフェースのメソッドでは、OC4JロールとEISユーザー間のマッピングがサポートされます。ログイン・モジュールは、OC4JロールとEISユーザー間でマッピングを行わない場合は、InitiatingPrincipalおよびInitiatingGroupクラスを参照する必要がありません。

JAASと<connector-factory>要素

oc4j-ra.xmlの各<connector-factory>要素には、異なるJAASログイン・モジュールを指定できます。<jaas-module>要素に、コネクタ・ファクトリ構成の名前を指定します。次に、oc4j-ra.xmlファイルの<connector-factory>要素の例を示します。この例では、コンテナ管理サインオンにログイン・モジュールが使用されています。

  <connector-factory connector-name="myBlackbox" location="eis/myEIS1"> 
    <description>Connection to my EIS</description>
    <config-property name="connectionURL"
                     value="jdbc:oracle:thin:@localhost:5521/myservice" />
    <security-config>
      <jaas-module>
        <jaas-application-name>JAASModuleDemo</jaas-application-name>
      </jaas-module>
    </security-config>
  </connector-factory>

JAASでは、特定のアプリケーションに使用するログイン・モジュールと、ログイン・モジュール間の起動順序を指定する必要があります。JAASでは、<jaas-application-name>要素に指定された値を使用してログイン・モジュールを検索します。


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

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