この章では、OPSSでアイデンティティ・ストア・サービスを使用する方法について説明します。この章の内容は次のとおりです。
この項では、OPSSアイデンティティ・ストア・サービスにおける次の主要概念について説明します。
アデンティティ・ストア・サービスを使用すると、アデンティティ・ストアにユーザーおよびロール(グループ)の情報を問い合せることができます。
デフォルトでは、サービス・インスタンスは、単一のLDAPアイデンティティ・ストアへの問合せをサポートしています。複数のLDAPアイデンティティ・ストアに問合せを行う仮想アイデンティティ・ストアをサポートするようにサービスを構成できます。ID仮想化として知られているこの機能については、第7.3項「アイデンティティ・ストア・サービスの構成」を参照してください。
図7-1は、アイデンティティ・ストア・サービスのアーキテクチャを示しています。構成に応じて、サービスは次のものをサポートします:
1つ以上のLDAPサーバー
XMLファイル
これらをアイデンティティ・ストアとしてサポートします。
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つ指定します。既存の値を上書きしない場合は、このパラメータを設定する必要はありません。t
表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ストアに固有のものです。詳細は、次を参照してください。
WebLogicコンソールまたはWLSTコマンドラインのいずれかを使用して、Oracle WebLogic ServerにLDAP認証プロバイダを構成します。実行時に、Oracle WebLogic ServerからOPSSに構成の詳細が渡されます。Oracle WebLogic Serverでは、特定のコンテキストで複数の認証プロバイダを構成することができます。アイデンティティ・ストア・サービスを初期化する際に、デフォルトでは、最初の認証プロバイダが選択されます。このプロセスについては、第3.1.2.2項「LDAPアイデンティティ・ストア・サービスの構成」を参照してください。
認証プロバイダを構成した後で、アイデンティティ・ストア・サービスを設定して、1つのLDAPアイデンティティ・ストアまたは複数のストアに問い合せることができます。複数のストアを構成するにはvirtualize
プロパティを設定する必要があります。
この項では、これらのオプションの設定方法について説明します。
アイデンティティ・ストア・サービスを構成して、問合せ可能なLDAPストアは1つだけです。例7-1は、単一のLDAPサービス・インスタンスを使用する場合のjps-config.xmlの断片を示しています。
単一のLDAPの場合の設定に記載されているように、Oracle WebLogic Serverに認証プロバイダを構成して起動します。
続いて、Fusion Middleware Controlで次の手順を実行します。
左側のナビゲーション・ペインでWebLogicドメインを選択します。
「セキュリティ」→「セキュリティ・プロバイダ構成」に移動します。
ページ上の「アイデンティティ・ストア・プロバイダ」セクションを開きます。
「構成」をクリックします(「アイデンティティ・ストアと対話するユーザー/ロールAPIで使用するパラメータの構成」に相当)。
「アイデンティティ・ストア構成」ページが表示されます。
「カスタム・プロパティ」で「追加」をクリックします。
次のように、新しいプロパティを追加します。
Property Name=virtualize Value=true
注意: このプロパティは、デフォルト・コンテキストのアイデンティティ・ストアのサービス・インスタンスに追加してください。 |
「OK」をクリックします。
WLSTを使用してvirtualizeプロパティを構成するには、次の手順を実行します。
対象ドメインの管理サーバーに接続するためのpy
スクリプト・ファイルを作成します。この操作をするには、userName
、userPass
、localHost
、およびportNumber
を指定する必要があります。
このスクリプトの詳細は、付録E「WLSTスクリプトを使用したOPSSサービス・プロバイダ・インスタンスの構成」を参照してください。
$ORACLE_HOME/common/bin
に移動します。
wlst.sh
コマンドを実行して、スクリプトを実行します。
たとえば、idstore.ldapという名前の認証プロバイダがドメイン構成ファイルに含まれている場合、次のようにコマンドを入力します。
wlst.sh /tmp/updateServiceInstanceProperty.py -si idstore.ldap -key "virtualize" -value "true"
複数のLDAP検索に使用するプロバイダが構成されます。
必要に応じて、jps-config.xml
を更新して、第7.3.1項「構成内容」に記載されている問合せパラメータを設定できます。これらのパラメータはオプションです。デフォルト値が指定されています。
複数のLDAP問合せを構成したら、Weblogicサーバー(管理サーバーおよび管理対象サーバー)を再起動します。
例7-1に、単一のLDAP問合せ用にOracle WebLogic Server環境に構成されたjps-config.xml
のサンプル・ファイルを示します。
例7-1 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-2に、複数のLDAP問合せ用にOracle WebLogic Server環境に構成されたjps-config.xml
のサンプル・ファイルを示します。
例7-2 Oracle WebLogic Serverにおける複数のLDAP構成
<jpsConfig xmlns="http://xmlns.oracle.com/oracleas/schema/11/jps-config-11_1.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.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=oracle,dc=com</value> </values> </extendedProperty> <extendedProperty> <name>group.create.bases</name> <values> <value>cn=groups_front,dc=us,dc=oracle,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仮想化のためのアダプタ構成」を参照してください。
このセクションの構成は次のとおりです。
詳細は、第22.2.2項「JavaSEアプリケーションでのLDAPアイデンティティ・ストアの構成」の例を参照してください。
サード・パーティのアプリケーション・サーバーにある複数のLDAPに対応するアイデンティティ・ストア・サービスを構成する手順は、次のとおりです。
jps-config.xmlファイルを変更して、LDAP対応のディレクトリごとにサービスのインスタンスを構成します。
アプリケーション・サーバーを再起動して、変更を有効にします。
例7-3に、サード・パーティのアプリケーション・サーバーに複数のLDAP問合せを実行するように構成されたjps-config.xmlファイルのサンプルを示します。
例7-3 サード・パーティのアプリケーション・サーバーにおける複数のLDAP構成
<jpsConfig xmlns="http://xmlns.oracle.com/oracleas/schema/11/jps-config-11_1.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.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=oracle,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://oid1.us.oracle.com:389,ldap://oid2.us.oracle.com:389"/> <extendedProperty> <name>user.search.bases</name> <values> <value>cn=users,dc=us,dc=oracle,dc=com</value> </values> </extendedProperty> <extendedProperty> <name>group.search.bases</name> <values> <value>cn=groups,dc=us,dc=oracle,dc=com</value> </values> </extendedProperty> <extendedProperty> <name>username.attr</name> <values> <value>uid</value> </values> </extendedProperty> <extendedProperty> <name>groupname.attr</name> <values> <value>cn</value> </values> </extendedProperty> </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=oracle,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://msad1.us.oracle.com:389,ldap://msad2.us.oracle.com:389"/> <extendedProperty> <name>user.search.bases</name> <values> <value>cn=users,dc=us,dc=oracle,dc=com</value> </values> </extendedProperty> <extendedProperty> <name>group.search.bases</name> <values> <value>cn=groups,dc=us,dc=oracle,dc=com</value> </values> </extendedProperty> <extendedProperty> <name>username.attr</name> <values> <value>cn</value> </values> </extendedProperty> <extendedProperty> <name>groupname.attr</name> <values> <value>cn</value> </values> </extendedProperty> </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=oracle,dc=com</value> </values> </extendedProperty> <extendedProperty> <name>group.create.bases</name> <values> <value>cn=groups_front,dc=us,dc=oracle,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項「構成内容」の「フロントエンド・パラメータ」を参照してください。
JavaSE環境では、次のようにjps-config.xml
ファイルを直接変更します。
アイデンティティ・ストアのサービス・インスタンスを定義します。
新しいサービス・インスタンスをJPSコンテキストに追加して、事前に定義されているアイデンティティ・ストア・インスタンスはすべて置き換えます。
アイデンティティ・ストア・サービスの「virtualize
」フラグを有効にするには、例7-3を参照してください。
詳細は、第22.2.2項「JavaSEアプリケーションでのLDAPアイデンティティ・ストアの構成」を参照してください。
プログラム上でLDAPアイデンティティ・ストアに問い合せるには、OPSSを使用してJPSコンテキストを取得します(これは、ストア・インスタンスを取得するブリッジのように機能します)。続いて、ユーザーおよびロールAPIを使用して、ストアに問い合せます。
例7-4 プログラムによる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 // } catch (Exception e) { e.printStackTrace() }
MBeansの使用方法の詳細は、第E.2項「MBeanを使用したOPSSサービスの構成」を参照してください。