1.3項「Oracle Entitlements Serverのアーキテクチャの概要」で説明しているように、ポリシー情報ポイント(PIP)は、属性値のソースとして機能するシステム・エンティティです。Oracle Entitlements Serverは、1つ以上のこれらの情報ストアから属性値を取得するために、属性リトリーバ・プラグインに依存しています。これらの属性リトリーバにより、属性の値がアクセスの決定に影響するデータ・ドリブン方式でポリシーを使用できます。たとえば、銀行口座からの送金へのアクセスが現在口座にある金額に基づく場合、属性リトリーバ・コンポーネントを使用して現在の残高を取得できます。
事前定義済属性リトリーバは、Oracle Entitlements Serverに同梱されています。この章では、これらの事前定義済属性リトリーバ、関連する構成要件およびカスタム属性リトリーバの構成について説明します。この章には次の項目があります。
| 注意:詳細は、『Oracle Fusion Middleware Oracle Entitlements Server開発者ガイド』の属性リトリーバでの作業に関する項を参照してください。 | 
Oracle Entitlements Serverには事前定義済属性リトリーバが含まれており、これは、Lightweight Directory Access Protocol (LDAP)データ・ストアおよびリレーショナル・データベース管理システム(RDBMS)に接続し、属性値を取得するために使用されます。これらの事前定義済属性リトリーバは、追加のプログラミングを行わずに、システムに定義された1つ以上の属性を処理できます。これには、キャッシング機能およびフェイルオーバーも含まれています。
SMConfig UIを使用すると、次の属性リトリーバを作成できます。
LDAP属性リトリーバ
RDBMS属性リトリーバ
カスタム属性リトリーバ
SMConfig UIを使用する属性リトリーバの構成の前提条件は次のとおりです。
oesclientがインストールされていること
SMインスタンスがインストールされているか、jps-config.xmlファイルが存在すること
特定のjps-config.xmlファイルを編集するには、次の手順を実行します。
oesclient/oessm/enroll/binディレクトリにナビゲートします。
コマンド./oessmconfig.sh -jpsconfig [path]/jps-config.xmlを実行します。
SMインスタンスのjps-config.xmlファイルを編集するには、次の手順を実行します。
oesclient/oes_sm_instances/[SM Name]/binディレクトリにナビゲートします。
コマンド./oessmconfig.shを実行します。
属性リトリーバを追加するには、次の手順を実行します。
SMConfig UIで、「PIPパラメータ」タブをクリックします。
「属性リトリーバ」タブをクリックします。
「新規」ボタンをクリックします。
「属性リトリーバの作成」ダイアログで、第8章「セキュリティ・モジュールの構成の管理」の表8-6「Javaセキュリティ・モジュールのPIPパラメータ(属性リトリーバ)」に説明されているように情報を指定します。
「保存」をクリックして属性リトリーバを保存します。
属性リトリーバを編集するには、次の手順を実行します。
SMConfig UIで、「PIPパラメータ」タブをクリックします。
「属性リトリーバ」タブをクリックします。
「属性リトリーバ」タブにリストされた既存の属性を選択します。
「編集」ボタンをクリックします。
「属性リトリーバ」ダイアログで、属性リトリーバ情報を更新します。
「保存」をクリックして属性リトリーバの変更内容を保存します。
属性リトリーバを削除するには、次の手順を実行します。
SMConfig UIで、「PIPパラメータ」タブをクリックします。
「属性リトリーバ」タブをクリックします。
既存の属性リトリーバを選択します。
「削除」ボタンをクリックします。
確認ダイアログで、「はい」をクリックして属性リトリーバを削除します。
属性リトリーバの属性を追加するには、次の手順を実行します。
| 注意:次のタスクのいずれかを実行するには、属性リトリーバが少なくとも1つ存在している必要があります。 | 
SMConfig UIで、「PIPパラメータ」タブをクリックします。
「属性」タブをクリックします。
「新規」ボタンをクリックします。
「属性の作成」ダイアログのフィールドに入力します。
「保存」をクリックして属性を保存します。
属性リトリーバの属性を編集するには、次の手順を実行します。
SMConfig UIで、「PIPパラメータ」タブをクリックします。
「属性」タブをクリックします。
「属性」タブにリストされた既存の属性を選択します。
「編集」ボタンをクリックします。
「属性」ダイアログで、属性情報を更新します。
「保存」をクリックして属性の変更内容を保存します。
属性を削除するには、次の手順を実行します。
SMConfig UIで、「PIPパラメータ」タブをクリックします。
「属性」タブをクリックします。
「属性」タブにリストされた既存の属性を選択します。
「削除」ボタンをクリックします。
確認ダイアログで、「はい」をクリックして属性を削除します。
属性リトリーバの構成情報は、$DOMAIN_HOME/config/fmwconfigディレクトリにあるjps-config.xml構成ファイル(Java EEコンテナで使用)で定義されます。事前定義済属性リトリーバを手動で構成するには、次を実行する必要があります。
属性名、使用する属性リトリーバの名前、値を取得する検索問合せ(たとえば、PIPがリレーショナル・データベースの場合はSQL問合せ、ディレクトリの場合はLDAP問合せ)、および属性値のキャッシング情報など、属性値を個別に構成します。
属性リトリーバを実装するクラスの名前に関する情報を構成します。
データ・ストアへの接続に必要な情報と資格証明情報を構成します。
属性リトリーバ参照を宣言します。
次の各項では、各タイプの属性リトリーバの構成パラメータの詳細を説明します。
事前定義済属性リトリーバのタイプは次のとおりです。
LDAP属性リトリーバ
LDAP属性リトリーバはLDAPデータベースから属性値を取得します。
RDBMS属性リトリーバ
RDBMS属性リトリーバはRDBMSデータベースから属性値を取得します。
表B-1に、属性リトリーバを構成するためのロードマップを示します。
表B-1 構成のロードマップ
| 番号 | タスク | 情報 | 
|---|---|---|
| 1. | 
 | 詳細は、B.3.2項「個々の属性値の構成」を参照してください。 | 
| 2. | 
 | 詳細は、B.3.3項「PIPサービス・プロバイダの宣言」を参照してください。 | 
| 3. | 
 | 詳細は、B.3.4項「リポジトリ接続の構成」を参照してください。 | 
| 4. | 
 | 詳細は、B.3.5項「jpsContextsセクションでの事前定義済属性リトリーバ参照の宣言」を参照してください。 | 
属性問合せ情報は、特定の属性に関連しており、名前、使用する事前定義済属性リトリーバの名前、取得のための検索問合せ(たとえば、ストアがリレーショナル・データベースの場合はSQL問合せ、ストアがディレクトリの場合はLDAP問合せ)、および属性キャッシング情報が含まれます。属性問合せ情報は、jps-config.xmlの<propertySets>セクションで定義されます。
表B-2では、構成された属性リトリーバによって取得された各属性に定義されるパラメータについて説明します。
表B-2 取得する属性の構成
| 名前 | 使用方法 | 
|---|---|
| name | 説明: ポリシー・ストアで定義されている属性の名前。LDAP事前定義済属性リトリーバを使用している場合、Oracle Entitlements Serverに定義される属性名は、LDAPストアで定義される属性名と同じである必要があります。現在、名前マッピング機能はありません。 必須 許容値: 属性名 | 
| query | 説明: 問合せのために使用されるデータベースのSQLコマンドまたはLDAPフィルタ。ユーザーは、問合せ文字列内の組込み属性およびカスタム属性を使用できます。たとえば、組込み属性 必須 許容値: SQLコマンドまたはLDAPフィルタ。 | 
| ttl | 説明: cachedが有効化されている場合、cached属性値の存続時間(秒)。 オプション 許容値: 任意の整数。キャッシュが有効化されている場合、デフォルト値は60秒です。 | 
| cached | 説明: 属性値のキャッシングを有効化します。 オプション 許容値: デフォルト値はfalseです。 | 
| ootb.pip.attr.type | 説明: OOTB_PIP_ATTRIBUTEに設定する必要があります。 必須 許容値: OOTB_PIP_ATTRIBUTE | 
| ootb.pip.ref | 説明: OOTB PIPインスタンスに設定する必要があります。 必須 許容値:  | 
例B-1に、LDAPリトリーバに定義される属性を示します。
例B-1 LDAP属性リトリーバに定義される属性問合せ情報
<propertySet name="ootb.pip.attribute.age.based.on.myattr.ldap">
    <property name="ootb.pip.attr.type" value="OOTB_PIP_ATTRIBUTE"/>
    <property name="ootb.pip.ref" value="pip.service.ootb.ldap"/>
    <property name="name" value="oespipage_myattr"/>
    <property name="query" value="(cn=%MyAttr%)"/>
    <property name="cached" value="true"/>
    <property name="ttl" value="60"/>
</propertySet>
例B-2に、RDBMSリトリーバに定義される属性を示します。
例B-2 RDBMS属性リトリーバに定義される属性問合せ情報
  <propertySet name="ootb.pip.attribute.age.based.on.myattr.rdbms">
     <property name="ootb.pip.attr.type" value="OOTB_PIP_ATTRIBUTE"/>
     <property name="ootb.pip.ref" value="pip.service.ootb.db"/>
     <property name="name" value="oespipage_myattr"/>
     <property name="query" value="select oespipage 
         as oespipage_myattr from pip_info_store where username=%MyAttr%"/>
     <property name="cached" value="true"/>
     <property name="ttl" value="60"/>
  </propertySet>
例B-3は、内部Oracle Entitlements Serverクラスを定義することによって、serviceProvider要素が事前定義済属性リトリーバの使用を定義する方法を示します。
リポジトリ接続情報は、データ・ストアに接続するために使用され、場所、JDBCドライバとURLまたはLDAP URL(いずれか該当するもの)、およびユーザー/資格証明情報が含まれます。この接続情報は、特定のリトリーバ・インスタンスに関連します。リポジトリ接続情報は、jps-config.xmlの<serviceInstances>セクションで定義されます。
| 注意:インスタンスは、デフォルトの <jpsContexts>セクションにも定義する必要があります。例B-6「jpsContextセクションでの事前定義済属性リトリーバ参照の宣言」を参照してください。 | 
B.3.4.1項「LDAPリポジトリ属性リトリーバ・パラメータの構成」、B.3.4.2項「データベース・リポジトリ属性リトリーバ・パラメータの構成」、およびB.3.7項「jps-config.xmlファイルの例」では、リポジトリ接続構成に関する情報が記載されています。
| 注意:これらの事前定義済属性リトリーバは、Oracle Database 11gR1、Oracle Internet Directory 11gR1、およびOracle Virtual Directory 11gR1で構成できます。 | 
表B-3では、LDAP属性リトリーバを使用する場合に定義する必要があるパラメータについて説明します。構成のサンプル・コードは、例B-4「事前定義済LDAP属性リトリーバの使用」および例B-9「LDAPフェイルオーバーの構成」を参照してください。
表B-3 LDAP属性リトリーバ・パラメータ
| 名前 | 使用方法 | 
|---|---|
| name | 説明: 事前定義済属性リトリーバの名前(PIPインスタンス名) 必須 許容値: 属性リトリーバのサービス・インスタンスを定義する文字列。 | 
| description | 説明: 事前定義済属性リトリーバの説明(PIPインスタンスの説明) オプション 許容値: 文字列 | 
| type | 説明: 事前定義済属性リトリーバのタイプ(当該PIPインスタンスのタイプ) 必須 許容値: LDAP_PIP | 
| failed.server.retry.interval | 説明: プライマリ・リポジトリとの通信が失敗した後、この属性は、プライマリ・リポジトリにスイッチ・バックする前にバックアップ・リポジトリが使用されている時間間隔を定義します。 オプション 許容値: 秒数に等しい値を指定します。デフォルト値は15です。 | 
| bootstrap.security.principal.key | 説明: LDAPポリシー・ストアにアクセスするためのパスワード資格証明のプリンシパル・キーを定義し、CSFストアに格納されています。JEEアプリケーションおよびJSEアプリケーションで有効です。LDAPストアおよびデータベース・ストアに適用します。B.3.4.3項「PIP接続資格証明の設定」を参照してください。 必須 許容値: 資格証明のキー名( | 
| bootstrap.security.principal.map | 説明: LDAPポリシー・ストアにアクセスするためのパスワード資格証明のプリンシパル・マップを定義し、CSFストアに格納されています。JEEアプリケーションおよびJSEアプリケーションで有効です。LDAPストアおよびデータベース・ストアに適用します。B.3.4.3項「PIP接続資格証明の設定」を参照してください。 必須 許容値: 資格証明のマップ名( | 
| ldap.url | 説明: LDAPポリシー・ストアのURLを定義します。JEEアプリケーションおよびJSEアプリケーションで有効で、LDAPストアにのみ適用します。 必須 許容値: LDAPポリシー・ストアのURIで、形式は | 
| search.base | 説明: LDAP検索ベース。 必須: LDAP用のみ。 許容値: 検索ベース・オブジェクトのDN。 | 
例B-4は、事前定義済LDAP属性リトリーバを使用する場合にserviceInstance要素を変更する方法を示します。
例B-4 事前定義済LDAP属性リトリーバの使用
<serviceInstance name="pip.service.ootb.ldap" provider="pip.service.provider"> <property name="type" value="LDAP_PIP"/> <property name="ldap.url" value="ldap://dadvmg0065.domainexample.com:3080"/> <property name="bootstrap.security.principal.key" value="keyname"/> <property name="bootstrap.security.principal.map" value="mapname"/> <property name="failed.server.retry.interval" value="10"/> </serviceInstance>
表B-4では、RDBMS属性リトリーバを使用する場合に定義する必要があるパラメータについて説明します。構成のサンプル・コードは、例B-5「JDBCでの事前定義済RDBMS属性リトリーバの使用」および例B-6「データ・ソースでの事前定義済RDBMS属性リトリーバの使用」を参照してください。
表B-4 RDBMS属性リトリーバ・パラメータ
| 名前 | 使用方法 | 
|---|---|
| name | 説明: 事前定義済属性リトリーバの名前(PIPインスタンス名) 必須 許容値: 属性リトリーバのサービス・インスタンスを定義する文字列。 | 
| description | 説明: 事前定義済属性リトリーバの説明(PIPインスタンスの説明) オプション 許容値: 文字列 | 
| type | 説明: 事前定義済属性リトリーバのタイプ(当該PIPインスタンスのタイプ) 必須 許容値: RDBMS_PIP | 
| failed.server.retry.interval | 説明: プライマリ・リポジトリが失敗した後、この属性は、プライマリ・リポジトリにスイッチ・バックする前にバックアップ・リポジトリが使用されている時間間隔を特定します。 オプション 許容値: 秒数に等しい値を指定します。デフォルト値は15です。 | 
| bootstrap.security.principal.key | 説明: データベースにアクセスするためのパスワード資格証明のプリンシパル・キーを定義し、CSFストアに格納されています。JEEアプリケーションおよびJSEアプリケーションで有効です。B.3.4.3項「PIP接続資格証明の設定」を参照してください。 必須 許容値: 資格証明のキー名( | 
| bootstrap.security.principal.map | 説明: データベースにアクセスするためのパスワード資格証明のプリンシパル・マップを定義し、CSFストアに格納されています。JEEアプリケーションおよびJSEアプリケーションで有効です。B.3.4.3項「PIP接続資格証明の設定」を参照してください。 必須 許容値: 資格証明のマップ名( | 
| jdbc.driver | 説明: Java Database Connectivity (JDBC) APIを使用してデータベースに接続する場合のドライバの場所。 必須: JDBC APIを使用してデータベースに接続している場合。 許容値:  | 
| jdbc.url | 説明: データベースを指すURLを指定します。 必須: JDBC APIを使用してデータベースに接続している場合。 許容値: カンマ区切りのURLのリスト。最初はプライマリなどとして処理されます。たとえば、 | 
| datasource.jndi.name | 説明: JDBCを直接介するのではなくデータ・ソースを介してPIPインスタンスを動作させる場合のデータ・ソースJNDI名。データ・ソース・シナリオは、WebLogic ServerおよびWebSphere Application Serverのみでサポートされます。 必須: JDBCを直接介するのではなくデータ・ソースを介してPIPインスタンスを動作させる場合。 許容値: 事前定義済データ・ソース・オブジェクトのJNDI名。 | 
次の2つの例は、事前定義済RDBMS属性リトリーバを使用する場合にserviceInstance要素を変更する方法を示します。
例B-5は、Java Database Connectivity (JDBC) APIを介して動作するRDBMS属性リトリーバが必要な場合の例です。
例B-5 JDBCでの事前定義済RDBMS属性リトリーバの使用
<serviceInstance name="pip.service.ootb.db" provider="pip.service.provider">
    <property name="type" value="RDBMS_PIP"/>
    <property name="jdbc.url" 
     value="jdbc:oracle:thin:@scl58116.domainexample.com:1521:orcl"/>
    <property name="jdbc.driver" value="oracle.jdbc.driver.OracleDriver"/>
    <property name="bootstrap.security.principal.map" value="mapname"/>
    <property name="bootstrap.security.principal.key" value="keyname"/>
    <property name="failed.server.retry.interval" value="10"/>
</serviceInstance>
例B-6は、JDBCを直接使用するのではなく、データ・ソースを介して動作するRDBMS属性リトリーバが必要な場合の例です。
表B-3「LDAP属性リトリーバ・パラメータ」および表B-4「RDBMS属性リトリーバ・パラメータ」に示すように、bootstrap.security.principal.keyパラメータおよびbootstrap.security.principal.mapパラメータは、データ・ストアにアクセスするためのキーおよびマップ(それぞれ)を定義します。Oracle Entitlements Serverには、ブートストラップ資格証明ストアにこれらのLDAPおよびデータベース接続資格証明を設定するoesPassword.shが付属しています。ツールは、$OES_SM_INSTANCE_DIRECTORY/bin/ディレクトリにあります。
| 注意: oesPassword.shを実行する前に、CLASSPATHに対して次のクラスを設定します。
 | 
ツールを実行するには、次の手順を実行します。
Oracle_Home/wlserver_10.3/server/lib/*をsetOesEnv.shファイルのOES_CLASSPATHに追加します。
次のコマンドを入力します。
./oesPassword.sh -setpass
セキュリティ・プリンシパルのキー名、セキュリティ・プリンシパルのマップ名、ユーザー名および関連するパスワードの入力が求められます。
セキュリティ上の理由により、データベースに構成されているパスワードは、定期的に変更されます。したがって、Oracle Entitlements Serverコンポーネント(管理サーバーとセキュリティ・モジュール)を新しいパスワードに更新する必要があります。その手順を次に示します。
管理サーバーは、WebLogic Serverデータソースを使用して、データベース・アクセスとデータベース接続管理を提供します。パスワードを変更するには、WebLogic Serverコンソールを使用して、データソース構成を新しいパスワードで更新します。それ以外の手順は必要ありません。
セキュリティ・モジュールは、次のどちらかの方法で特定のデータベースに接続できます。
制御プル、非制御または混合のいずれかの配布モードでポリシーを配布する際、セキュリティ・モジュールは、ポリシー・ストアとして使用されているデータベースに接続します。
セキュリティ・モジュールは、属性リトリーバを使用して属性リポジトリから属性を取得する際、任意のリレーショナル・データベース管理システム(RDBMS)に接続できます。(この接続はデフォルトのポリシー・ストアに制限されません。)
どちらの場合も、WebLogic Serverデータソース構成または直接JDBCプロパティのどちらかを使用できます。WLSデータソース構成を使用して接続する場合、WebLogic Serverコンソールを使用して、データソース構成を新しいパスワードで更新します。それ以外の手順は必要ありません。直接JDBCプロパティを使用して接続する場合、B.B.3.4.3項「PIP接続資格証明の設定」で説明されているoesPasswordユーティリティを使用します。資格証明のマップとキーはjps-config.xmlで定義されます。
例B-7は、jpsContext要素で事前定義済属性リトリーバ参照を宣言する方法を示します。このサンプルでは、事前定義済RDBMS属性リトリーバを定義しています。
例B-7 jpsContextでの事前定義済属性リトリーバの宣言
  <jpsContext name="default">
       <serviceInstanceRef ref="policystore.db"/>
       <serviceInstanceRef ref="pdp.service"/>
       <serviceInstanceRef ref="audit"/>
       <serviceInstanceRef ref="idstore.xml"/>
       <serviceInstanceRef ref="idstore.loginmodule"/>
       <serviceInstanceRef ref="pip.service.ootb.db"/>
</jpsContext>
メモリー内キャッシュ・メカニズムは、Oracle Entitlements Serverと外部リポジトリ間の通信を減らすことでパフォーマンスを向上させるために使用されます。キャッシュは最大1000エントリを保持し、個々の属性に対して有効化できます。キャッシュ・サイズは構成できません。制限に達すると、キャッシュ項目はランダムに削除されます。例B-1は、cachedプロパティとttlプロパティを持つ個々の属性の定義を示します。
例B-8は、特定の属性値のキャッシングを構成する方法を示します。キャッシングは属性ごとに有効化されます。この例では、キャッシュ・レコードは60秒後に削除されます。
例B-8 属性のキャッシュの有効化
<propertySet name="ootb.pip.attribute.gender.ldap">
        <property name="ootb.pip.attr.type" value="OOTB_PIP_ATTRIBUTE"/>
        <property name="ootb.pip.ref" value="pip.service.ootb.ldap"/>
        <property name="name" value="oespipgender"/>
        <property name="query" value="(oespipage=%oespipage%)"/>
        <property name="cached" value="true"/>
        <property name="ttl" value="60"/>
</propertySet>
リポジトリ・フェイルオーバーも構成できます。属性への呼出しを受信すると、Oracle Entitlements Serverは、プライマリ・リポジトリがアクティブであるかどうかを確認します。アクティブな場合、値が取得されます。プライマリ・リポジトリがアクティブではない場合、すでに失敗しており、バックアップ・リポジトリがアクティブになります。後者の場合、Oracle Entitlements Serverは、(構成に基づいて)アクティブ・リポジトリへのスイッチ・バックのタイミングであるかどうかを確認します。スイッチ・バックのタイミングである場合、切替えが行われ、プライマリ・リポジトリから値が取得されます。構成された時間がまだ経過していない場合、アクティブなバックアップ・リポジトリから値が取得されます。
| 注意:プライマリ・リポジトリから値を取得中にエラーが発生した場合、Oracle Entitlements Serverは、アクティブなバックアップ・リポジトリが見つかるまで、バックアップ・リポジトリを1つずつ検索します。 | 
例B-9は、フェイルオーバー動作を構成する方法を示します。この例では、プライマリ接続はldap://dadvmg0065:3080で、バックアップ接続はldap://scl58123:3060です。失敗したサーバーの再試行間隔は10秒です。
例B-9 LDAPフェイルオーバーの構成
<serviceInstance name="pip.service.ootb.ldap" provider="pip.service.provider">
      <property name="type" value="LDAP_PIP"/>
      <property name="ldap.url" 
         value="ldap://dadvmg0065:3080,ldap://scl58123:3060"/>
      <property name="bootstrap.security.principal.key" value="keyname"/>
      <property name="bootstrap.security.principal.map" value="mapname"/>
      <property name="failed.server.retry.interval" value="10"/>
</serviceInstance>
jps-config.xml内で事前定義済属性リトリーバを構成するには、この項の各例で説明しているように、要素を変更します。例B-10は、jps-config.xmlファイルのサンプルです。これに続く各例は、行うことができる変更を示します。
例B-10 jps-config.xmlファイルのサンプル
<?xml version="1.0"?>
 
<jpsConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="
http://xmlns.oracle.com/oracleas/schema/jps-config-11_0.xsd">
 
   <property name="oracle.security.jps.jaas.mode" value="off"/>
   <property name="oracle.security.jps.enterprise.user.class" 
    value="weblogic.security.principal.WLSUserImpl"/>
   <property name="oracle.security.jps.enterprise.role.class" 
    value="weblogic.security.principal.WLSGroupImpl"/>
 
<propertySets>
<!-- These are the global authenticated role properties -->
  <propertySet name="authenticated.role.properties">
     <property name="authenticated.role.name" value="authenticated-role"/>
     <property name="authenticated.role.uniquename" value="authenticated-role"/>
     <property name="authenticated.role.description" 
        value="This is the authenticated role used by identity store 
        service instance."/>
  </propertySet>
 
<!-- attribute defined for ldap retriever -->
  <propertySet name="ootb.pip.attribute.age.ldap">
     <property name="ootb.pip.attr.type" value="OOTB_PIP_ATTRIBUTE"/>
     <property name="ootb.pip.ref" value="pip.service.ootb.ldap"/>
     <property name="name" value="oespipage"/>
     <property name="query" value="(cn=%SYS_USER%)"/>
     <property name="cached" value="true"/>
     <property name="ttl" value="60"/>
  </propertySet>
 
  <propertySet name="ootb.pip.attribute.age.based.on.myattr.ldap">
     <property name="ootb.pip.attr.type" value="OOTB_PIP_ATTRIBUTE"/>
     <property name="ootb.pip.ref" value="pip.service.ootb.ldap"/>
     <property name="name" value="oespipage_myattr"/>
     <property name="query" value="(cn=%MyAttr%)"/>
     <property name="cached" value="true"/>
     <property name="ttl" value="60"/>
  </propertySet>
 
  <propertySet name="ootb.pip.attribute.gender.ldap">
     <property name="ootb.pip.attr.type" value="OOTB_PIP_ATTRIBUTE"/>
     <property name="ootb.pip.ref" value="pip.service.ootb.ldap"/>
     <property name="name" value="oespipgender"/>
     <property name="query" value="(oespipage=%oespipage%)"/>
     <property name="cached" value="true"/>
     <property name="ttl" value="60"/>
  </propertySet>
 
<!-- attribute defined for rdbms retriever -->
  <propertySet name="ootb.pip.attribute.age.rdbms">
     <property name="ootb.pip.attr.type" value="OOTB_PIP_ATTRIBUTE"/>
     <property name="ootb.pip.ref" value="pip.service.ootb.db"/>
     <property name="name" value="oespipage"/>
     <property name="query" value="select oespipage 
         from pip_info_store where username=%SYS_USER%"/>
     <property name="cached" value="true"/>
     <property name="ttl" value="60"/>
  </propertySet>
 
  <propertySet name="ootb.pip.attribute.age.based.on.myattr.rdbms">
     <property name="ootb.pip.attr.type" value="OOTB_PIP_ATTRIBUTE"/>
     <property name="ootb.pip.ref" value="pip.service.ootb.db"/>
     <property name="name" value="oespipage_myattr"/>
     <property name="query" value="select oespipage 
         as oespipage_myattr from pip_info_store where username=%MyAttr%"/>
     <property name="cached" value="true"/>
     <property name="ttl" value="60"/>
  </propertySet>
 
  <propertySet name="ootb.pip.attribute.gender.rdbms">
     <property name="ootb.pip.attr.type" value="OOTB_PIP_ATTRIBUTE"/>
     <property name="ootb.pip.ref" value="pip.service.ootb.db"/>
     <property name="name" value="oespipgender"/>
     <property name="query" value="select oespipgender 
          from pip_info_store where oespipage=%oespipage%"/>
      <property name="cached" value="true"/>
     <property name="ttl" value="60"/>
  </propertySet>
</propertySets>
 
<serviceProviders>
 
  <serviceProvider type="CREDENTIAL_STORE" name="credstoressp" 
       class="oracle.security.jps.internal.credstore.ssp.
              SspCredentialStoreProvider">
     <description>SecretStore-based CSF Provider</description>
  </serviceProvider>
 
  <serviceProvider class="oracle.security.jps.az.
        internal.runtime.provider.PIPServiceProvider" 
        name="pip.service.provider" type="PIP"/>
 
  <serviceProvider type="POLICY_STORE" name="policy.rdbms" 
        class="oracle.security.jps.internal.policystore.
        OPSSPolicyStoreProvider">
     <property name="policystore.type" value="DB_ORACLE"/>
     <description>DBMS based PolicyStore</description>
  </serviceProvider>
 
  <serviceProvider name="pdp.service.provider" type="PDP" 
         class="oracle.security.jps.az.internal.
         runtime.provider.PDPServiceProvider">
      <description>OPSS Runtime PDP Service Provider</description>
  </serviceProvider>
 
  <serviceProvider name="idstore.xml.provider" type="IDENTITY_STORE" 
         class="oracle.security.jps.internal.idstore.
         xml.XmlIdentityStoreProvider">
       <description>XML-based IdStore Provider</description>
  </serviceProvider>
 
  <serviceProvider name="jaas.login.provider" type="LOGIN" 
         class="oracle.security.jps.internal.
         login.jaas.JaasLoginServiceProvider">
       <description>This is Jaas Login Service Provider and is used 
         to configure login module service instances</description>
  </serviceProvider>
 
  <serviceProvider name="policy.xml" type="POLICY_STORE"
        class="oracle.security.jps.internal.
        policystore.xml.XmlPolicyStoreProvider">
     <description>XML-based PolicyStore</description>
</serviceProvider>
 
<serviceProvider type="POLICY_STORE" name="policy.oid"               
         class="oracle.security.jps.internal.
         policystore.ldap.LdapPolicyStoreProvider">
     <description>LDAP-based PolicyStore</description>
     <property name="policystore.type" value="OID"/>
     <property name="connection.pool.maxsize" value="30"/>
     <property name="connection.pool.provider.type" value="idmpool"/>
  </serviceProvider>
 
  <serviceProvider type="AUDIT" name="audit.provider" 
        class="oracle.security.jps.internal.audit.AuditProvider">
       <description>Audit Service</description>
  </serviceProvider>
</serviceProviders>
 
<serviceInstances>
 
  <serviceInstance name="credstore" provider="credstoressp" location="./">
          <description>File Based Credential Store Service Instance</description>
  </serviceInstance>
 
  <serviceInstance name="idstore.xml" provider="idstore.xml.provider">
<!-- Subscriber name must be defined for XML Identity Store -->
     <property name="subscriber.name" value="jazn.com"/>
<!-- This is the location of XML Identity Store -->
     <property name="location" value="./user-data.xml"/>
<!-- This property set defines the authenticated role -->
     <propertySetRef ref="authenticated.role.properties"/>
  </serviceInstance>
  <serviceInstance name="idstore.loginmodule" 
          provider="jaas.login.provider">
          <description>Identity Store Login Module</description>
     <property name="loginModuleClassName" value="oracle.security.jps.internal.
            jaas.module.idstore.IdStoreLoginModule"/>
     <property name="jaas.login.controlFlag" value="REQUIRED"/>
     <property name="debug" value="true"/>
     <property name="addAllRoles" value="true"/>
  </serviceInstance>
 
  <serviceInstance name="policystore.rdbms" provider="policy.rdbms">
        <property name="jdbc.url" 
           value="jdbc:oracle:thin:@scl58116.domainexample.com:1521:orcl"/>
        <property name="jdbc.driver" value="oracle.jdbc.driver.OracleDriver"/>
        <property name="bootstrap.security.principal.key" value="keyname"/>
        <property name="bootstrap.security.principal.map" value="mapname"/>
        <property name="oracle.security.jps.ldap.root.name" 
           value="cn=jpsTestNode"/>
        <property name="oracle.security.jps.farm.name" 
           value="cn=wcai_view_jing.atzsrg"/>
  </serviceInstance>
 
  <serviceInstance name="policystore.rdbms.ds" provider="policy.rdbms">
     <property name="oracle.security.jps.ldap.root.name" 
         value="cn=jpsTestNode"/>
     <property name="oracle.security.jps.farm.name" 
         value="cn=wcai_view_jing.atzsrg"/>
     <property value="atzsrgds" name="datasource.jndi.name"/>
  </serviceInstance>
 
  <serviceInstance name="pdp.service" provider="pdp.service.provider">
     <property name="oracle.security.jps.runtime.pd.client.sm_name" 
           value="${atzsrg.pdp.configuration_id}"/>
     <property name="oracle.security.jps.pdp.
           AuthorizationDecisionCacheEnabled" value="true"/>
     <property name="oracle.security.jps.pdp.
           AuthorizationDecisionCacheEvictionCapacity" value="500"/>
     <property name="oracle.security.jps.pdp.
           AuthorizationDecisionCacheEvictionPercentage" value="10"/>
     <property name="oracle.security.jps.pdp.
           AuthorizationDecisionCacheTTL" value="60"/>
     <property name="oracle.security.jps.ldap.
           policystore.refresh.interval" value="30000"/>
     <property name="oracle.security.jps.policystore.
           refresh.purge.timeout" value="600000"/> <!-- 10 minutes -->
     <property name="loading_attribute_backward_compatible" value="false"/>
<!-- Properties for controlled mode PD -->
     <property name="oracle.security.jps.runtime.
           pd.client.policyDistributionMode" value="non-controlled"/>
     <property name="oracle.security.jps.runtime.
           instance.name" value="${atzsrg.pdp.instance_name}"/>
  </serviceInstance>
 
  <serviceInstance name="policystore.oid" provider="policy.oid">
    <property name="max.search.filter.length" value="4096"/>
    <property name="bootstrap.security.principal.key" value="keyname"/>
    <property name="bootstrap.security.principal.map" value="mapname"/>
    <property name="ldap.url" value="ldap://scl58126.domainexample.com:3060"/>
    <property name="oracle.security.jps.ldap.root.name" 
       value="cn=jpsTestNode"/>
    <property name="oracle.security.jps.farm.name" 
       value="cn=wcai_view_jing.atzsrg"/>
    <property name="oracle.security.jps.policystore.resourcetypeenforcementmode" 
       value="Lenient"/>
  </serviceInstance>
 
  <serviceInstance name="policystore.xml" provider="policy.xml" 
              location="./system-jazn-data.xml"/>
 
  <serviceInstance name="user.authentication.loginmodule" 
              provider="jaas.login.provider">
         <description>User Authentication Login Module</description>
         <property name="loginModuleClassName" 
              value="oracle.security.jps.internal.
              jaas.module.authentication.JpsUserAuthenticationLoginModule"/>
         <property name="jaas.login.controlFlag" value="REQUIRED"/>
  </serviceInstance>
 
  <serviceInstance name="user.assertion.loginmodule" 
              provider="jaas.login.provider">
         <description>User Assertion Login Module</description>
         <property name="loginModuleClassName" 
              value="oracle.security.jps.internal.
              jaas.module.assertion.JpsUserAssertionLoginModule"/>
         <property name="jaas.login.controlFlag" value="REQUIRED"/>
  </serviceInstance>
 
  <serviceInstance name="pip.service.ootb.ldap" provider="pip.service.provider">
         <property name="type" value="LDAP_PIP"/>
         <property name="ldap.url" 
              value="ldap://scl58126.domainexample.com:3060"/>
         <property name="bootstrap.security.principal.key" value="keyname"/>
         <property name="bootstrap.security.principal.map" value="mapname"/>
         <property name="search.base" value="cn=pip_info_store,
              cn=wcai_view_jing.atzsrg,cn=JPSContext,cn=jpsTestNode"/>
         <property name="failed.server.retry.interval" value="10"/>
 </serviceInstance>
<!-- JPS Audit Service Instance-->
 <serviceInstance name="audit" provider="audit.provider">
         <property name="audit.filterPreset" value="None"/>
         <property name="audit.maxDirSize" value ="0"/>
         <property name="audit.maxFileSize" value ="104857600"/>
         <property name="audit.loader.jndi" value="jdbc/AuditDB"/>
         <property name="audit.loader.interval" value="15" />
         <property name="audit.loader.repositoryType" value="File" />
 </serviceInstance>
 
 <serviceInstance name="pip.service.ootb.db" provider="pip.service.provider">
         <property name="type" value="RDBMS_PIP"/>
         <property name="jdbc.url" 
              value="jdbc:oracle:thin:@scl58116.domainexample.com:1521:orcl"/>
         <property name="jdbc.driver" value="oracle.jdbc.driver.OracleDriver"/>
         <property name="bootstrap.security.principal.key" value="keyname"/>
         <property name="bootstrap.security.principal.map" value="mapname"/>
         <property name="failed.server.retry.interval" value="10"/>
 </serviceInstance>
 
 <serviceInstance name="pip.service.ootb.db.ds" provider="pip.service.provider">
         <property name="type" value="RDBMS_PIP"/>
         <property value="atzsrgds" name="datasource.jndi.name"/>
         <property name="failed.server.retry.interval" value="10"/>
 </serviceInstance>
 
</serviceInstances>
 
    <jpsContexts default="default">
        <jpsContext name="default">
            <serviceInstanceRef ref="policystore.oid"/>
            <serviceInstanceRef ref="pdp.service"/>
            <serviceInstanceRef ref="audit"/>
            <serviceInstanceRef ref="idstore.xml"/>
            <serviceInstanceRef ref="idstore.loginmodule"/>
            <serviceInstanceRef ref="pip.service.ootb.ldap"/>
            <serviceInstanceRef ref="pip.service.ootb.db"/>
        </jpsContext>
        <jpsContext name="smsec">
            <serviceInstanceRef ref="credstore"/>
        </jpsContext>
 
    </jpsContexts>
 
</jpsConfig>
カスタム属性リトリーバを手動で設定するには、例として次の項を使用します。
属性リトリーバの構成情報は、$DOMAIN_HOME/config/fmwconfigディレクトリにあるjps-config.xml構成ファイル(Java EEコンテナで使用)で定義されます。カスタム属性リトリーバを手動で設定するには、例として次の項を使用します。
カスタム属性リトリーバのjps-config.xmlファイルの構成方法の例として、次の項を確認します。
カスタム属性リトリーバのサービス・プロバイダの宣言
例B-11は、内部Oracle Entitlements Serverクラスを定義することによって、serviceProvider要素がカスタム属性リトリーバの使用を定義する方法を示します。
例B-11 カスタム属性リトリーバのサービス・プロバイダの宣言
<serviceProvider class="oracle.security.jps.az.internal.runtime.provider.PIPServiceProvider" name="pip.service.provider" type="PIP"/>
カスタム属性リトリーバのタイプおよびクラス名の指定
タイプをLDAP_PIPとして、クラス名をカスタム属性リトリーバの完全修飾名で指定します。
例B-12 カスタム属性リトリーバのタイプおよびクラス名の指定
<serviceInstance name="pip.service.MyAttributeRetriever" provider="pip.service.provider">
     <property name="type" value="LDAP_PIP"/>
     <property name="application" value="myapp"/>
     <property name="description" value="custom pip"/>
     <property name="classnames" value="com.mycompany.info.MyPip"/> </serviceInstance>
jpsContextでのカスタム属性リトリーバ参照の宣言
例B-13は、jpsContext要素でカスタム属性リトリーバ参照を宣言する方法を示します。
例B-13 jpsContextでのカスタム属性リトリーバ参照の宣言
<jpsContext name="default">
     <serviceInstanceRef ref="pip.service.MyAttributeRetriever"/>
     <serviceInstanceRef ref="pdp.service"/>
     <serviceInstanceRef ref="audit"/>
     <serviceInstanceRef ref="idstore.xml"/>
     <serviceInstanceRef ref="idstore.loginmodule"/>
     <serviceInstanceRef ref="@atzsrg.ootb.pip.instance@"/>
</jpsContext>
カスタムPIPは次のインタフェースを実装する必要があります。
例B-14
package com.bea.security.providers.authorization.asi;
 
import java.util.Map;
 
import javax.security.auth.Subject;
 
import com.bea.security.providers.authorization.asi.ARME.evaluator.RequestHandle;
 
import weblogic.security.service.ContextHandler;
import weblogic.security.spi.Resource;
 
/**Version 2 interface for performing attribute retrieval, an implementation of an <code>AttributeRetrieverV2</code> may be used to get embedded data from complex data objects. Multiple retrievers may be registered for the same attribute name, they will be called in order until one returns a non-null result. The difference between Version 1 and Version 2 interface: Version 2 interface introduces a RequestHandle parameter, from which the function is able to get ARME internal system attributes.
*/
public interface AttributeRetrieverV2 {
 
 
     /**Returns the names of attributes handled by this object. An empty or
        <code>null</code> value indicates that the retriever will be considered
        capable of handling any attribute name.
        @return the names associated with this object*/
     String[] getHandledAttributeNames();
 
 
    /**retrieve the value of the named attribute.  Additional authorization
       request data is made available to allow for more complex attribute 
       retrieval.
       @param name the name of the needed attribute
       @param requestHandle the attributes container associated with the request,
            through which the function can get required attribute value.
       @param subject the subject associated with the request
       @param roles the role membership of the subject
            key: role name.
            value: role object
            <code>null</code> if function is called during role mapping
       @param resource the resource associated with the request
       @param contextHandler the context associated with the request, may be 
            <code>null</code> if non-existant
       @return the attributes value, or <code>null</code> if not found
    */
    Object getAttributeValue(String name,
                             RequestHandle requestHandle,
                             Subject subject,
                             Map roles,
                             Resource resource,
                             ContextHandler contextHandler);
 
} //endof AttributeRetrieverV2