この章では、OPSSアイデンティティ・ストア・サービスを使用する方法について説明します。この項の内容は次のとおりです。
この項では、OPSSアイデンティティ・ストア・サービスにおける次の主要概念について説明します。
アイデンティティ・ストア・サービスを使用すると、アイデンティティ・ストアにユーザーおよびロール(グループ)の情報を問い合せることができます。
デフォルトでは、サービス・インスタンスは、単一のLDAPアイデンティティ・ストアへの問合せをサポートしています。複数のLDAPアイデンティティ・ストアに問合せを行う仮想アイデンティティ・ストアをサポートするようにサービスを構成できます。ID仮想化として知られているこの機能については、第7.3項「アイデンティティ・ストア・サービスの構成」を参照してください。
図7-1は、アイデンティティ・ストア・サービスのアーキテクチャを示しています。構成に応じて、サービスではアイデンティティ・ストアとして、XMLファイルまたは1つ以上のLDAPサーバーをサポートできます。
LDAP用にサービスを構成すると、デフォルトでは、単一のLDAPストアに問合せが行われます。複数のLDAPストアに問い合せるように、サービスを構成することもできます。
アイデンティティ・ストア・サービスは、次のサーバーをサポートしています。
Oracle WebLogic Server
サード・パーティのアプリケーション・サーバー
サービスの構成内容は、アプリケーション・サーバーによって異なるため、そのサービスをサポートするプロバイダを指定する必要があります。
アイデンティティ・ストア・サービスを使用する前に、アイデンティティ・ストア・プロバイダを構成する必要があります。OPSSでは、ファイルベース(XML)とLDAPベースの両方のプロバイダがサポートされます。
次のjps-config.xml
ファイルの断片は、XMLプロバイダとLDAPプロバイダの構成を示しています。serviceProvider
は、serviceProviders
要素の子要素です。
<serviceProvider type="IDENTITY_STORE" name="idstore.ldap.provider" class="oracle.security.jps.internal.idstore.ldap.LdapIdentityStoreProvider"> <description>LDAP-based IdentityStore Provider</description> </serviceProvider> <serviceProvider type="IDENTITY_STORE" name="idstore.xml.provider" class="oracle.security.jps.internal.idstore.xml.XmlIdentityStoreProvider"> <description>XML-based IdentityStore Provider</description> </serviceProvider>
詳細は、第8.7.1項「アイデンティティ・ストア・プロバイダの構成」を参照してください。
この項では、アイデンティティ・ストア・サービスをLDAPベースのストアに構成する方法について説明します。この項の内容は次のとおりです。
この項では、アイデンティティ・ストア・サービスの各種構成パラメータについて説明します。内容は次のとおりです。
複数のLDAP問合せ用にサービスを構成するには、次のパラメータを使用します。
virtualize
プロパティ - このプロパティには、true (複数のLDAP検索)またはfalse (単一のLDAP検索)を設定できます。デフォルトはfalse
です。
グローバル接続パラメータ(virtualize
が有効の場合) - アプリケーションの呼び出す際に、これらのパラメータを使用して、グローバルLDAP構成(ベースの検索、ベースの作成など)を指定します。これらのパラメータのいずれかが構成されていない場合、OPSSはデフォルト値を使用します。
バックエンド接続パラメータ - このパラメータは各LDAPストアに固有のものです。各LDAPに対して1セットのバックエンド・パラメータが指定されます。既存の値を上書きしないかぎり、このパラメータを設定する必要はありません。
表7-1は、グローバル・パラメータとそのデフォルト値(該当する場合)を示しています。
表7-1 LDAPアイデンティティ・ストアのグローバル・パラメータ
パラメータ | デフォルト値 |
---|---|
group.create.bases |
user.create.basesと同じ |
group.filter.object.classes |
groupofuniquenames グローバル値が明示的に指定されている場合に使用 |
group.mandatory.attrs |
- |
group.member.attrs |
uniquemember |
group.object.classes |
groupofuniquenames |
group.search.bases |
- |
group.selected.create.base |
- |
group.selected.search.base |
- |
groupname.attr |
cn グローバル値が明示的に指定されている場合に使用 |
max.search.filter.length |
- |
search.type |
- |
user.create.bases |
認証プロバイダが1つしかない場合は、それが作成ベース値として使用されます。認証プロバイダが複数ある場合は、デフォルト値が設定されないため、ユーザーが明示的にグローバル値を設定する必要があります。 |
user.filter.object.classes |
inetorgperson |
user.login.attr |
uid |
user.mandatory.attrs |
- |
user.object.classes |
inetorgperson グローバル値が明示的に指定されている場合に使用 |
user.search.bases |
group.search.basesと同じ |
username.attr |
cn グローバル値が明示的に指定されている場合に使用 |
前述のように、このパラメータはバックエンドLDAPストアに固有のものです。詳細は、次を参照してください:
Oracle WebLogic Serverでは、LDAP認証プロバイダは、WebLogicコンソールまたはWLSTコマンドラインを使用して構成します。実行時にOracle WebLogic Serverによって構成の詳細がOPSSに渡されます。Oracle WebLogic Serverでは、特定のコンテキストで複数の認証プロバイダを構成することができます。また、アイデンティティ・ストア・サービスを初期化する際に、デフォルトでは、最初の認証プロバイダが選択されます。この処理については、第3.2.2.1項「複数の認証プロバイダ」で説明しています。
認証プロバイダを構成した後で、アイデンティティ・ストア・サービスを設定して、1つのLDAPアイデンティティ・ストアまたは複数のストアに問い合せることができます。複数のストアを構成するにはvirtualize
プロパティを設定する必要があります。
この項では、これらのオプションの設定方法について説明します。
アイデンティティ・ストア・サービスを構成して、問合せ可能なLDAPストアは1つだけです。単一のLDAPサービス・インスタンスを使用する場合のjps-config.xml
ファイルの断片を示している例7-2を参照してください。
virtualize
プロパティを設定できない場合は、複数のLDAPストアを問い合せて、WebLogic Serverの構成をオーバーライドするようアイデンティティ・ストア・サービスを構成できます。jps-config.xml
ファイルの断片を示している例7-1を参照してください。この例では、LDAP URLのカンマ区切りリストを使用して複数のLDAPサービス・インスタンスが定義されています。
単一のLDAPの場合の設定に記載されているように、Oracle WebLogic Serverに認証プロバイダを構成して起動します。
次に、Fusion Middleware Controlで次の手順を実行します。
左側のナビゲーション・ペインでWebLogicドメインを選択します。
「セキュリティ」→「セキュリティ・プロバイダ構成」に移動します。
ページ上の「アイデンティティ・ストア・プロバイダ」セクションを開きます。
「構成」をクリックします(「アイデンティティ・ストアと対話するユーザー/ロールAPIで使用するパラメータの構成」に相当)。
「アイデンティティ・ストア構成」ページが表示されます。
「カスタム・プロパティ」で「追加」をクリックします。
次のように、新しいプロパティを追加します。
Property Name=virtualize Value=true
注意: このプロパティは、デフォルト・コンテキストのアイデンティティ・ストアのサービス・インスタンスに追加してください。 |
「OK」をクリックします。
WLSTを使用してvirtualizeプロパティを構成するには、次の手順を実行します。
対象ドメインの管理サーバーに接続するためのpy
スクリプト・ファイルを作成します。この操作をするには、userName
、userPass
、localHost
、およびportNumber
を指定する必要があります。
このスクリプトの詳細は、付録E「スクリプトを使用したOPSSサービス・プロバイダ・インスタンスの構成」を参照してください。
$ORACLE_HOME/common/bin
に移動します。
wlst.sh
コマンドを実行して、スクリプトを実行します。
たとえば、idstore.ldapという名前の認証プロバイダがドメイン構成ファイルに含まれている場合、次のようにコマンドを入力します。
wlst.sh /tmp/updateServiceInstanceProperty.py -si idstore.ldap
-key "virtualize" -value "true"
複数のLDAP検索に使用するプロバイダが構成されます。
WLSTを使用してタイムアウト設定を構成するには、次の手順を実行します。
次のWLSTコマンドを実行し、すべてのアダプタをリストします。listAdapters()
次のWLSTコマンドを実行して、アダプタごとにタイムアウトを設定します。たとえば、120秒のタイムアウトを設定します。タイムアウトなしの場合はゼロに設定します。
modifyLDAPAdapter('<ADAPTER NAME>', 'OperationTimeout', 120000)
WebLogic Serverを再起動します。
必要に応じて、jps-config.xml
を更新して、第7.3.1項「構成内容」に記載されている問合せパラメータを設定できます。これらのパラメータはオプションです。デフォルト値が指定されています。
複数のLDAP問合せを構成したら、WebLogic管理サーバーおよび管理対象サーバーを再起動します。
例7-2に、単一のLDAP問合せ用にOracle WebLogic Server環境に構成されたjps-config.xml
のサンプル・ファイルを示します。
例7-2 Oracle WebLogic Serverにおける単一のLDAP構成
<!-- JPS WLS LDAP Identity Store Service Instance --> <serviceInstance name=idstore.ldap provider=idstore.ldap.provider> <property name=idstore.config.provider value=oracle.security.jps.wls.internal.idstore. WlsLdapIdStoreConfigProvider/> <property name=CONNECTION_POOL_CLASS value=oracle.security.idm.providers.stdldap.JNDIPool/> </serviceInstance>
例7-3に、複数のLDAP問合せ用にOracle WebLogic Server環境に構成されたjps-config.xml
のサンプル・ファイルを示します。
例7-3 Oracle WebLogic Serverにおける複数のLDAP構成
<jpsConfig xmlns="http://xmlns.example.com/oracleas/schema/11/jps-config-11_1.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.example.com/oracleas/schema/11/jps-config-11_1.xsd" schema-major-version="11" schema-minor-version="1"> <serviceProviders> <serviceProvider type="IDENTITY_STORE" name="idstore.ldap.provider" class="oracle.security.jps.internal.idstore.ldap.LdapIdentityStoreProvider"> <description>LDAP-based IdentityStore Provider</description> </serviceProvider> </serviceProviders> <serviceInstances> <!-- IDstore instance connecting to multiple ldap --> <serviceInstance name="idstore.virtualize" provider="idstore.ldap.provider"> <!-- following property indicates using WLS ldap Authenticators --> <property name="idstore.config.provider" value="oracle.security.jps.wls.internal.idstore.WlsLdapIdStoreConfigProvider"/> <!-- following property enables virtualization i.e., support for multiple stores --> <property name="virtualize" value="true"/> <!-- Front end ldap properties (if not supplied, will use default values) --> <extendedProperty> <name>user.create.bases</name> <values> <value>cn=users_front,dc=us,dc=example,dc=com</value> </values> </extendedProperty> <extendedProperty> <name>group.create.bases</name> <values> <value>cn=groups_front,dc=us,dc=example,dc=com</value> </values> </extendedProperty> </serviceInstance> </serviceInstances> <jpsContexts default="default"> <!-- the identity store uses multiple ldaps --> <jpsContext name="default"> <!-- use multiple ldap --> <serviceInstanceRef ref="idstore.virtualize"/> <!-- .....other services --> </jpsContext> </jpsContexts> </jpsConfig>
次のことに留意してください:
複数のLDAP問合せを有効にするために、サービス・インスタンスのvirtualize
プロパティをtrue
に設定します。
必要に応じて、デフォルト値をオーバーライドする場合は、extendedProperty
要素を使用することにより、フロントエンド・パラメータを設定できます。
詳細は、第7.3.1項「構成内容」の「フロントエンド・パラメータ」を参照してください。
ID仮想化では「分割プロファイル」がサポートされています。分割プロファイルでは、2つの異なるソースに格納されている単一IDの属性をアプリケーションが使用します。
この機能には、この章で説明している構成以外に追加構成が必要です。詳細は、付録K「ID仮想化のためのアダプタ構成」を参照してください。
OPSSでは、アイデンティティ・ストアにアクセスするための、複数のLDAPベースのOracle WebLogic Server認証プロバイダ(WebLogic認証プロバイダ)がサポートされています。出荷時に設定されているWebLogic認証プロバイダがLDAPサーバー・タイプに適していない場合は、このタスク用に汎用の認証プロバイダをカスタマイズできます。
この項では、アイデンティティ・ストア・サービスに対してvirtualizeフラグが有効になっている場合に、このような認証プロバイダを構成する方法について説明します。
このコンテキストでは、次の点に注意してください。
汎用のLDAP認証プロバイダの使用時には、適切なLDAPプラグインを見つけられるように、アイデンティティ・ストア・サービスに対して正確なLDAPタイプを指定する必要があります。これは、jps-config.xml
内のidstore.type
プロパティをオーバーライドすることにより行います。
virtualize
フラグが有効になっており、Oracle WebLogic Serverドメインに複数の認証プロバイダがあるため(たとえば、defaultAuthenticatorと汎用のLDAP)、アイデンティティ・ストア・サービスに対して、どのLDAPサーバーのidstore.type
をオーバーライドすべきかを指定する必要があります。
この情報は、jps-config.xml
内で次のように指定します。
<serviceInstance name="idstore.ldap" provider="idstore.ldap.provider">
<property name="idstore.config.provider"
value="oracle.security.jps.wls.internal.idstore.WlsLdapIdStoreConfigProvider"
/>
<property name="CONNECTION_POOL_CLASS"
value="oracle.security.idm.providers.stdldap.JNDIPool" />
<property value="true" name="virtualize" />
<!-- the following refer to the Generic ldap name configured on the WLS
authenticator provider, you get this name from WebLogic config.xml file or admin
console -->
<serviceInstanceRef ref="myGenericLDAPName"/>
</serviceInstance>
<!-- the following provide the overriding to the Generic ldap (e.g. AD)
-->
<!-- "myGenericLDAPName" is the name used on WLS for the generic LDAP
authenticator provider -->
<serviceInstance name="myGenericLDAPName" provider="idstore.ldap.provider">
<!-- the following overrides the 'idstore.type' property to
"ACTIVE_DIRECTORY" -->
<property name="idstore.type" value="ACTIVE_DIRECTORY" />
</serviceInstance>
別のLDAPプロバイダ・インスタンスもオーバーライドする必要がある場合は、ファイルに同様のエントリを追加します。
この項のトピックは次のとおりです:
詳細は、第22.3.2項「Java SEアプリケーションでのLDAPアイデンティティ・ストアの構成」の例を参照してください。
サード・パーティのアプリケーション・サーバーにある複数のLDAPに対応するアイデンティティ・ストア・サービスを構成する手順は、次のとおりです。
jps-config.xml
ファイルを変更して、LDAP対応のディレクトリごとにサービスのインスタンスを構成します。
アプリケーション・サーバーを再起動して、変更を有効にします。
例7-4に、サード・パーティのアプリケーション・サーバーに複数のLDAP問合せを実行するように構成されたjps-config.xml
ファイルのサンプルを示します。
例7-4 サード・パーティのアプリケーション・サーバーにおける複数のLDAP構成
<jpsConfig xmlns="http://xmlns.example.com/oracleas/schema/11/jps-config-11_1.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.example.com/oracleas/schema/11/jps-config-11_1.xsd" schema-major-version="11" schema-minor-version="1"> <serviceProviders> <serviceProvider type="IDENTITY_STORE" name="idstore.ldap.provider" class="oracle.security.jps.internal.idstore.ldap.LdapIdentityStoreProvider"> <description>LDAP-based IdentityStore Provider</description> </serviceProvider> </serviceProviders> <serviceInstances> <!-- instance 'idstore.oid' to represent an ldap server 'oid' --> <serviceInstance name="idstore.oid" provider="idstore.ldap.provider"> <property name="subscriber.name" value="dc=us,dc=example,dc=com"/> <property name="idstore.type" value="OID"/> <property name="security.principal.key" value="oid.ldap.credentials"/> <property name="security.principal.alias" value="JPS"/> <property name="ldap.url" value="ldap://hostname.example.com:389,ldap://hostname.example.com:389"/> <extendedProperty> <name>user.search.bases</name> <values> <value>cn=users,dc=us,dc=example,dc=com</value> </values> </extendedProperty> <extendedProperty> <name>group.search.bases</name> <values> <value>cn=groups,dc=us,dc=example,dc=com</value> </values> </extendedProperty> <property name="username.attr" value="uid" /> <property name="groupname.attr" value="cn" /> </serviceInstance> <!-- instance 'idstore.ad' to represent an ldap server 'ad' --> <serviceInstance name="idstore.ad" provider="idstore.ldap.provider"> <property name="subscriber.name" value="dc=us,dc=example,dc=com"/> <property name="idstore.type" value="ACTIVE_DIRECTORY"/> <property name="security.principal.key" value="msad.ldap.credentials"/> <property name="security.principal.alias" value="JPS"/> <property name="ldap.url" value="ldap://hostname.example.com:389,ldap://hostname.example.com:389"/> <extendedProperty> <name>user.search.bases</name> <values> <value>cn=users,dc=us,dc=example,dc=com</value> </values> </extendedProperty> <extendedProperty> <name>group.search.bases</name> <values> <value>cn=groups,dc=us,dc=example,dc=com</value> </values> </extendedProperty> <property name="username.attr" value="uid" /> <property name="groupname.attr" value="cn" /> </serviceInstance> <!-- IDStore service "idservice.virtualize" to connect to multiple ldaps ( 'oid' and 'ad') using libOVD--> <serviceInstance name="idservice.virtualize" provider="idstore.ldap.provider"> <!--following property enables virtualization i.e., support for multiple stores --> <property name="virtualize" value="true"/> <!-- backend ldap instance "idstore.oid"--> <serviceInstanceRef ref="idstore.oid"/> <!-- backend ldap instance "idstore.ad"--> <serviceInstanceRef ref="idstore.ad"/> <!-- Front end ldap properties (if not supplied, will use default values) --> <extendedProperty> <name>user.create.bases</name> <values> <value>cn=users_front,dc=us,dc=example,dc=com</value> </values> </extendedProperty> <extendedProperty> <name>group.create.bases</name> <values> <value>cn=groups_front,dc=us,dc=example,dc=com</value> </values> </extendedProperty> </serviceInstance> </serviceInstances> <jpsContexts default="default"> <!-- IdStore service connect to multiple ldaps ('oid'+'ad') through libOVD--> <jpsContext name="default"> <!-- use multiple ldaps ('oid'+'ad') through libOVD--> <serviceInstanceRef ref="idservice.virtualize"/> <!-- .....other services --> </jpsContext> </jpsContexts> </jpsConfig>
次のことに留意してください:
最初のサービス・インスタンスは、Oracle Internet Directoryのプロバイダを定義しています。
2番目のサービス・インスタンスは、Microsoft Active Directoryのプロバイダを定義しています。
複数のLDAP問合せを有効にするために、サービス・インスタンスのvirtualize
プロパティをtrue
に設定します。
必要に応じて、デフォルト値をオーバーライドする場合は、extendedProperty
要素を使用することにより、フロントエンド・パラメータを設定できます。
詳細は、第7.3.1項「構成内容」の「フロントエンド・パラメータ」を参照してください。
Java SE環境では、すべての構成がjps-config-jse.xml
ファイルに設定されます。必要に応じて次を実行できます。
新しいアイデンティティ・ストアのサービス・インスタンスを定義します。
新しいサービス・インスタンスをJPSコンテキストに追加して、事前に定義されているアイデンティティ・ストア・インスタンスをすべて置き換えます。
アイデンティティ・ストア・サービスのvirtualizeフラグを有効にします。例7-4を参照してください。
詳細は、第22.3.2項「Java SEアプリケーションでのLDAPアイデンティティ・ストアの構成」を参照してください。
プログラム上でLDAPアイデンティティ・ストアに問い合せるには、OPSSを使用してJPSコンテキストを取得します(これは、ストア・インスタンスを取得するブリッジのように機能します)。続いて、ユーザーおよびロールAPIを使用して、ストアに問い合せます。
例7-5 プログラムによるLDAPアイデンティティ・ストアの問合せ
try { //find the JPS context JpsContextFactory ctxFactory = JpsContextFactory.getContextFactory(); JpsContext ctx = ctxFactory.getContext(); //find the JPS IdentityStore service instance //(assuming the backend is ldap type) LdapIdentityStore idstoreService = (LdapIdentityStore)ctx.getServiceInstance(IdentityStoreService.class) //get the User/Role API's Idmstore instance oracle.security.idm.IdentityStore idmIdentityStore = idstoreService.getIdmStore(); //use the User/Role API to query id store // //alternatively, instead of using IdentityStore, use the
//IdentityDirectory to access LDAP oracle.igf.ids.IdentityDirectory ids = idstoreService.getIdentityStore(); // ref. chapter "Developing with the Identity Directory API" // on how to use IdentityDirectory } catch (Exception e) { e.printStackTrace() }
アイデンティティ・ストア・サービスの「virtualize
」プロパティを有効にする方法を確認するには、例7-4を参照してください。
MBeansの使用方法の詳細は、第E.2項「MBeanを使用したOPSSサービスの構成」を参照してください。
アイデンティティ・ストアとLDAPサーバー間の接続に対してSSLを有効にできます。この項では、様々なシナリオで接続を構成する方法について説明します。次の表を使用して、使用する正しい手順を決定します。
仮想化フラグが設定される場合 | ユーザーとロールのAPIが使用中 | アイデンティティ・ディレクトリ・サービスが使用中 |
---|---|---|
virtualize=false (つまり仮想化フラグを設定しない) |
第8.2.3項で説明しているように、JSSEパラメータを使用してトラストストアを指定します。 例: -Djavax.net.ssl.trustStore=trust_store_path_name |
|
virtualize=true (つまり、仮想化フラグを設定) |
アイデンティティ・ストアへの接続がOracle WebLogic Server上のクライアントから始まる場合、SSLの構成はOracle WebLogic Serverで行います。詳細は、第8.2.3項を参照してください。
アイデンティティ・ディレクトリAPIとユーザーおよびロールAPIのどちらも、複数のLDAPアイデンティティ・ストア構成(virtualize = true)で動作できます。
このシナリオでは、アイデンティティ・ストアからLDAPサーバーへの接続に対してSSLを有効にできます。
手順は次のとおりです。
サービスが使用するLDAPサーバー証明書を格納するためのキーストアを作成します。WebLogic管理サーバーとキーストアの両方に対してパスワードを入力する必要があります。
$MW_HOME/oracle_common/bin/libovdconfig.shスクリプトを使用し、-createKeystoreオプションを指定して、キーストアを作成します。
libovdconfig.sh -host wls_host -port wls_adminserver_port -userName wls_user_name -domainPath full_path_domain_home -createKeystore
説明:
host
はOracle WebLogic Serverホストです。
port
はOracle WebLogic Serverの管理サーバーのポートです。
username
はOracle WebLogic Serverの管理ユーザー名です。
domainPath
はドメイン・ホームへの完全パスです。
適切なエクスポート・コマンドを使用して、LDAPディレクトリから証明書をエクスポートします。
この証明書を、ステップ1で作成したキーストアにインポートします。
keytool
コマンドを使用して、証明書をキーストアにインポートします。adapters.jks
という名前のキーストアに対する構文は次のとおりです。
$JAVA_HOME/bin/keytool -importcert -keystore $DOMAIN_HOME/config/fmwconfig/ovd/default/keystores/adapters.jks -storepass keystore_password_used_in_libovdconfig.sh -alias alias_name -file full_path_to_LDAPCert_file -noprompt
Oracle WebLogic Serverを再起動します。