Oracle® Fusion Middleware Oracle Entitlements Serverの管理 11gリリース2 (11.1.2.3.0) E67353-01 |
|
前 |
次 |
1.3項「Oracle Entitlements Serverのアーキテクチャの概要」で説明しているように、ポリシー情報ポイント(PIP)は、属性値のソースとして機能するシステム・エンティティです。Oracle Entitlements Serverは、1つ以上のこれらの情報ストアから属性値を取得するために、属性リトリーバ・プラグインに依存しています。これらの属性リトリーバにより、属性の値がアクセスの決定に影響するデータ・ドリブン方式でポリシーを使用できます。たとえば、銀行口座からの送金へのアクセスが現在口座にある金額に基づく場合、属性リトリーバ・コンポーネントを使用して現在の残高を取得できます。
事前定義済属性リトリーバは、Oracle Entitlements Serverに同梱されています。この章では、これらの事前定義済属性リトリーバ、関連する構成要件およびカスタム属性リトリーバの構成について説明します。この章には次の項目があります。
注意: 詳細は、『Oracle Entitlements Server開発者ガイド』の属性リトリーバでの作業に関する項を参照してください。 |
Oracle Entitlements Serverには事前定義済属性リトリーバが含まれており、これは、Lightweight Directory Access Protocol (LDAP)データ・ストアおよびリレーショナル・データベース管理システム(RDBMS)に接続し、属性値を取得するために使用されます。これらの事前定義済属性リトリーバは、追加のプログラミングを行わずに、システムに定義された1つ以上の属性を処理できます。これには、キャッシング機能およびフェイルオーバーも含まれています。
SMConfig UIを使用すると、次の属性リトリーバを作成できます。
LDAP属性リトリーバ
RDBMS属性リトリーバ
カスタム属性リトリーバ
SMConfig UIを使用する属性リトリーバの構成の前提条件は次のとおりです。
OESクライアントがインストールされている
セキュリティ・モジュールがインストールされているか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パラメータ」タブをクリックします。
PIP構成画面が表示されます。
「属性リトリーバ」タブをクリックします。
新しい属性リトリーバを作成するには、次の手順を実行します。
「新規」ボタンをクリックして、新しい属性リトリーバを追加します。
新規属性リトリーバの作成画面が表示されます。
「属性リトリーバの作成」画面で、第8章「セキュリティ・モジュールの構成の管理」の表8-6「Javaセキュリティ・モジュールのPIPパラメータ(属性リトリーバ)」に示されている情報を入力します。
「保存」をクリックし、新しい属性リトリーバを保存します。
注意: 画面には、フィールド説明、ステータスおよび許容値が表示されます。 |
属性リトリーバを編集するには、次の手順を実行します。
「属性リトリーバ」タブに表示されている既存の属性リトリーバを選択します。
「編集」ボタンをクリックして属性リトリーバを編集します。
表示される「属性リトリーバ」ダイアログで、値を更新します。
「保存」ボタンをクリックして、変更内容を保存します。
属性リトリーバを削除するには、次の手順を実行します。
「属性リトリーバ」タブに表示されている既存の属性リトリーバを選択します。
「削除」をクリックして属性リトリーバを削除します。
確認ダイアログで「はい」をクリックします。
属性リトリーバの属性を追加、編集または削除するには、次の手順を実行します。
注意: 次のタスクのいずれかを実行するには、属性リトリーバが少なくとも1つ存在している必要があります。 |
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コンソールを使用して、データソース構成を新しいパスワードで更新します。変更内容を有効にするには、アイテムを再起動する必要があります。WLST modifyBootStrapCredential
コマンドを実行してからサーバーを再起動します。
セキュリティ・モジュールは、次のどちらかの方法で特定のデータベースに接続できます。
制御プル、非制御または混合のいずれかの配布モードでポリシーを配布する際、セキュリティ・モジュールは、ポリシー・ストアとして使用されているデータベースに接続します。
セキュリティ・モジュールは、属性リトリーバを使用して属性リポジトリから属性を取得する際、任意のリレーショナル・データベース管理システム(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"/>
カスタム属性リトリーバのタイプおよびクラス名の指定
タイプをCUSTOM_PIPとして、クラス名をカスタム属性リトリーバの完全修飾名で指定します。
例B-12 カスタム属性リトリーバのタイプおよびクラス名の指定
<serviceInstance name="pip.service.MyAttributeRetriever" provider="pip.service.provider"> <property name="type" value="CUSTOM_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="pip.service.MyAttributeRetriever"/> </jpsContext>
カスタムPIPのクラスは次のインタフェースを実装する必要があり、セキュリティ・モジュールのクラスパスにそのクラスを追加する必要があります。
例B-14 カスタムPIPインタフェースの実装
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