Liberty での LDAP ユーザー・レジストリーの構成

認証用に、Liberty で 1 つ以上の Lightweight Directory Access Protocol (LDAP) サーバーを構成できます。

始める前に

LDAP サーバーが稼働していること、および LDAP サーバーのホスト名とポート番号が、既に既知のリスト内にあることを確認してください。

このタスクについて

Liberty でのアプリケーション認証には既存の LDAP サーバーを使用できます。このためには、appSecurity-2.0 フィーチャーを server.xml ファイルに追加し、server.xml ファイルに ldapRegistry-3.0 フィーチャーと、LDAP サーバーに接続するための構成情報を指定します。

トラブルの回避: Liberty でアプリケーションのセキュリティーを構成する際に参照できるよう、WASdev.net Web サイトにいくつかのセキュリティー構成例があります。詳しくは、構成スニペットの関連参照に含まれているリンクを参照してください。

手順

  1. Liberty フィーチャー appSecurity-2.0 および ldapRegistry-3.0server.xml ファイルに追加します。
  2. オプション: SSL 対応の LDAP サーバーと通信するには、server.xml ファイルで ssl-1.0 Liberty フィーチャーを追加します。
  3. オプション: トラストストアをサーバー構成ディレクトリーにコピーします。 例えば、${server.config.dir} 変数を使用できます。

    LDAP サーバーとの SSL 通信を成功させるには、LDAP サーバーの署名者証明書を、<ldapRegistry> エレメントの sslAlias 属性が参照するトラストストアに追加する必要があります。以下の例では、署名者証明書を LdapSSLTrustStore.jks に追加する必要があります。

  4. サーバーの LDAP エントリーを構成します。

    LDAP サーバーで SSL を必要としない場合は、以下の例から、SSL と鍵ストアに関連するすべての行を削除してください。

    LDAP サーバーを構成するには、server.xml ファイル内で行うか、WebSphere® Application Server Developer Tools for Eclipse を使用します。Liberty でアプリケーションのセキュリティーを構成する際に参照できるよう、WASdev.net Web サイトにいくつかのセキュリティー構成例があります。
    • IBM® Directory Server の場合:
      <ldapRegistry id="ldap" realm="SampleLdapIDSRealm" 
          host="ldapserver.mycity.mycompany.com" port="389" ignoreCase="true" 
          baseDN="o=mycompany,c=us" 
          ldapType="IBM Tivoli Directory Server"
          sslEnabled="true" 
          sslRef="LDAPSSLSettings">
          <idsFilters
          	userFilter="(&amp;(uid=%v)(objectclass=ePerson))" 
          	groupFilter="(&amp;(cn=%v)(|(objectclass=groupOfNames)
                           (objectclass=groupOfUniqueNames)
      		     (objectclass=groupOfURLs)))"
          	userIdMap="*:uid" 
          	groupIdMap="*:cn" 
          	groupMemberIdMap="mycompany-allGroups:member;mycompany-allGroups:uniqueMember;
      			  groupOfNames:member;groupOfUniqueNames:uniqueMember">
          </idsFilters>    
      </ldapRegistry>
      <ssl id="LDAPSSLSettings" keyStoreRef="LDAPKeyStore" trustStoreRef="LDAPTrustStore" /> 
      
      <keyStore id="LDAPKeyStore" location="${server.config.dir}/LdapSSLKeyStore.jks" 
           type="JKS" password="{xor}CDo9Hgw=" /> 
      <keyStore id="LDAPTrustStore" location="${server.config.dir}/LdapSSLTrustStore.jks" 
          type="JKS" password="{xor}CDo9Hgw=" />   
    • Microsoft Active Directory Server の場合:
      <ldapRegistry id="ldap" realm="SampleLdapADRealm" 
          host="ldapserver.mycity.mycompany.com" port="389" ignoreCase="true" 
          baseDN="cn=users,dc=adtest,dc=mycity,dc=mycompany,dc=com" 
          bindDN="cn=testuser,cn=users,dc=adtest,dc=mycity,dc=mycompany,dc=com" 
          bindPassword="testuserpwd"
          ldapType="Microsoft Active Directory" 
          sslEnabled="true" 
          sslRef="LDAPSSLSettings"> 
          <activedFilters
          userFilter="(&amp;(sAMAccountName=%v)(objectcategory=user))"
      groupFilter="(&amp;(cn=%v)(objectcategory=group))" 
         userIdMap="user:sAMAccountName" 
          groupIdMap="*:cn" 
          groupMemberIdMap="memberOf:member" >
      </activedFilters>
          </ldapRegistry>
      
      <ssl id="LDAPSSLSettings" keyStoreRef="LDAPKeyStore" trustStoreRef="LDAPTrustStore" /> 
      
      <keyStore id="LDAPKeyStore" location="${server.config.dir}/LdapSSLKeyStore.jks" 
                type="JKS" password="{xor}CDo9Hgw=" /> 
      <keyStore id="LDAPTrustStore" location="${server.config.dir}/LdapSSLTrustStore.jks" 
                type="JKS" password="{xor}CDo9Hgw=" />  

    WebSphere Application Server Developer Tools for Eclipseを使用すると、bindPasswordパスワードが自動的にエンコードされます。server.xml ファイルを直接編集する場合は、 securityUtility encode コマンドを使用することで bindPassword パスワードをエンコードできます。securityUtility コマンド行ツールは、$INSTALL_ROOT/bin ディレクトリー内にあります。securityUtility encode コマンドを実行するときに、エンコードするパスワードをコマンド行から入力します。引数が指定されない場合、ツールは、パスワードの入力を求めるプロンプトを出します。次に、ツールはエンコードされた値を出力します。ツールによって出力された値をコピーし、その値を bindPassword パスワードに使用してください。

  5. オプション: LDAP サーバーに証明書フィルター・モードを構成します。
    <ldapRegistry id="LDAP" realm="SampleLdapIDSRealm" 
          host="myldap.ibm.com" port="389" ignoreCase="true" 
          baseDN="o=ibm,c=us" 
          ldapType="IBM Tivoli Directory Server" searchTimeout="8m"
          certificateMapMode="CERTIFICATE_FILTER" 
          certificateFilter="uid=${SubjectCN}"> 
          <idsFilters
          userFilter="(&amp;(uid=%v)(objectclass=ePerson))" 
          groupFilter="(&amp;(cn=%v)(|(objectclass=groupOfNames)
              (objectclass=groupOfUniqueNames)(objectclass=groupOfURLs)))" 
          userIdMap="*:uid" 
          groupIdMap="*:cn" 
          groupMemberIdMap="ibm-allGroups:member;ibm-allGroups:uniqueMember;
              groupOfNames:member;groupOfUniqueNames:uniqueMember">
    </idsFilters>
          </ldapRegistry>
    Liberty での証明書マップ・モードについて詳しくは、『LDAP 証明書マップ・モード』を参照してください。
  6. オプション: LDAP 属性とユーザー・レジストリー・スキーマ属性間のマッピングを定義できます。

    マッピングを構成した後に、マッピングが定義されている操作でユーザー・レジストリー属性を使用すると、そのユーザー・レジストリー属性の値は、LDAP 属性の値になります。 以下の例では、server.xml ファイルでユーザー・レジストリー・プロパティー <password> を使用して LDAP 属性 <userPassword> に対してマッピングが定義されていることが分かります。 <defaultValue> 属性はオプションです。

    <ldapRegistry id="LDAP" realm="SampleLdapIDSRealm" 
          host="myldap.ibm.com" port="389" ignoreCase="true" 
          baseDN="o=ibm,c=us" 
          ldapType="IBM Tivoli Directory Server" searchTimeout="8m">
          <attributeConfiguration>
                 <attribute name="userPassword" propertyName="password" entityType="PersonAccount" defaultValue="xyz123"/>
          </attributeConfiguration>
    </ldapRegistry>
  7. オプション: LDAP 属性とユーザー・レジストリーの <externalId> 属性の間のマッピングを定義できます。

    LDAP 属性とユーザー・レジストリーの <externalId> 属性の間のマッピングを定義できます。このマッピングを構成した後は、どの操作についてもユーザー・レジストリーの <externalId> 属性を使用した場合、値は、マップされている LDAP 属性の値に等しくなります。以下のサンプル・コードは、ユーザー・レジストリーの <externalId> 属性とエンティティー・タイプ <PersonAccount> の LDAP <distinguishedName> 属性に定義されているマッピングを表示します。 <autoGenerate> 属性はオプションで、値はデフォルトで false になります。

    <ldapRegistry id="LDAP" realm="SampleLdapIDSRealm" 
          host="myldap.ibm.com" port="389" ignoreCase="true" 
          baseDN="o=ibm,c=us" 
          ldapType="IBM Tivoli Directory Server" searchTimeout="8m">
          <attributeConfiguration>
                 <externalIdAttribute name="distinguishedName" entityType="PersonAccount" autoGenerate="false"></externalIdAttribute>
          </attributeConfiguration>
    </ldapRegistry>
  8. オプション: 複数の LDAP サーバー用のフェイルオーバーを構成します。
    <ldapRegistry id="LDAP" realm="SampleLdapIDSRealm"
        	host="ldapserver1.mycity.mycompany.com" port="389" ignoreCase="true"
         	baseDN="o=ibm,c=us" ldapType="IBM Tivoli Directory Server" idsFilters="ibm_dir_server">
    	<failoverServers name="failoverLdapServersGroup1">
    		<server host="ldapserver2.mycity.mycompany.com" port="389" />
    		<server host="ldapserver3.mycity.mycompany.com" port="389" />
    	</failoverServers>
    	<failoverServers name="failoverLdapServersGroup2">
    		<server host="ldapserver4.mycity.mycompany.com" port="389" />
    	</failoverServers>
    </ldapRegistry>
    
    <idsLdapFilterProperties id="ibm_dir_server"
    	    userFilter="(&amp;(uid=%v)(objectclass=ePerson))"
    	    groupFilter="(&amp;(cn=%v)(|(objectclass=groupOfNames)
                     (objectclass=groupOfUniqueNames)(objectclass=groupOfURLs)))"
    	    userIdMap="*:uid" groupIdMap="*:cn"
    	    groupMemberIdMap="ibm-allGroups:member;ibm-allGroups:uniqueMember;
                          groupOfNames:member;groupOfUniqueNames:uniqueMember">
    </idsLdapFilterProperties>

    ldapRegistry エレメントおよび failoverServers エレメントについて詳しくは、LDAP User Registryを参照してください。

  9. オプション: 複数の LDAP レジストリーを構成します。server.xml ファイル内に複数の LDAP レジストリーが構成されている場合、それらは自動的に統合されます。ユーザーがすべての統合リポジトリー間で固有であることを確認してください。そうでないとユーザー・レジストリー操作は正常に実行されません。
    注: 複数の統合 LDAP リポジトリーを使用する場合、各リポジトリーで固有の baseDN を定義する必要があります。
    <ldapRegistry host="ldapserver1.mycity1.mycompany.com" baseDN="o=mycompany,c=us"
        port="123" ldapType="IBM Tivoli Directory Server"> 
    </ldapRegistry>
    
    <ldapRegistry host="ldapserver2.mycity2.mycompany.com" 
        baseDN="cn=users,dc=secfvt2,dc=mycity2,dc=mycompany,dc=com" 
        port="456"
        ldapType="Microsoft Active Directory" 
        bindDN="cn=testuser,cn=users,dc=secfvt2,dc=mycity2,dc=mycompany,dc=com" 
        bindPassword="{xor}KzosKyosOi0vKDs=">
    </ldapRegistry>
    注:
    • 複数の LDAP レジストリーは自動的に統合されるため、統合のための federatedRepository エレメント の指定は必須ではありません。participatingBaseEntry エレメントおよび primaryRealm エレメントを 構成するために federatedRepository エレメントが指定されている場合、 ユーザー・レジストリー操作は、primaryRealm エレメントに定義されているリポジトリーでのみ実行されます。異なるユーザー・レジストリー API の入出力プロパティーのマッピングを primaryRealm エレメントの下に定義できます。
    • participatingBaseEntry エレメントの name 属性 は、ldapRegistry エレメントに指定される baseDN 属性の 値と同じでなければなりません。以下の例では、ホスト ldapserver1.mycity1.mycompany.com 上の LDAP レジストリー に対して baseDN 属性および name 属性 が構成されています。 baseDN 属性の値は LDAP サーバー内のサブツリーのものと同じでなければならず、 name 属性の値は、統合ユーザー・レジストリー内のそのサブツリーの名前 でなければなりません。 name 属性の指定はオプションです。 デフォルトでは、name 属性 の値は baseDN 属性の値と同じです。ldapRegistry エレメントに name 属性 が指定される場合、participatingBaseEntry エレメントの name 属性 は、ldapRegistry エレメントの name 属性と同じ値を使用する必要があります。
    <ldapRegistry host="ldapserver1.mycity1.mycompany.com" baseDN="o=mycompany,ou=myou,c=us"
        port="123" ldapType="IBM Tivoli Directory Server" name="o=mybaseentry"> 
    </ldapRegistry>
    
    <ldapRegistry host="ldapserver2.mycity2.mycompany.com" 
        baseDN="cn=users,dc=secfvt2,dc=mycity2,dc=mycompany,dc=com" 
        port="456"
        ldapType="Microsoft Active Directory" 
        bindDN="cn=testuser,cn=users,dc=secfvt2,dc=mycity2,dc=mycompany,dc=com" 
        bindPassword="{xor}KzosKyosOi0vKDs=">
    </ldapRegistry>
    
    <federatedRepository>
    	 <primaryRealm name="RealmName" delimiter="@" allowOpIfRepoDown="true">
    	 	<participatingBaseEntry name="o=mybaseentry"/>
    		 <participatingBaseEntry name="cn=users,dc=secfvt2,dc=mycity2,dc=mycompany,dc=com"/>
    	 	 <uniqueUserIdMapping inputProperty="uniqueName" outputProperty="uniqueName"/>
    	 	 <userSecurityNameMapping inputProperty="principalName" outputProperty="principalName"/>
            		 <userDisplayNameMapping inputProperty="principalName" outputProperty="principalName"/>
    		 <uniqueGroupIdMapping inputProperty="uniqueName" outputProperty="uniqueName"/>
            		 <groupSecurityNameMapping inputProperty="cn" outputProperty="cn"/>
            		 <groupDisplayNameMapping inputProperty="cn" outputProperty="cn"/>
            	</primaryRealm>
    </federatedRepository>

    統合 ldapRegistry のエレメントについて詳しくは、LDAP User Registryを参照してください。

  10. オプション: 以下の例に示すように、contextPool または ldapCache など、LDAP レジストリーのその他のオプション属性を構成できます。
    <ldapRegistry id="IBMDirectoryServerLDAP"         realm="SampleLdapIDSRealm"
            host="host.domain.com" port="389" ignoreCase="true"
            baseDN="o=domain,c=us"
            bindDN="cn=testuser,o=domain,c=us"
            bindPassword="mypassword"
            ldapType="IBM Tivoli Directory Server"
            searchTimeout="8m">
        <contextPool enabled="true" initialSize="1" maxSize="0" timeout="0s" waitTime="3000ms" preferredSize="3"/>
        <ldapCache>
            <attributesCache size="4000" timeout="1200s" enabled="true" sizeLimit="2000"/>
            <searchResultsCache size="2000" timeout="600s" enabled="true" resultsSizeLimit="1000"/>
        </ldapCache>
    </ldapRegistry>
    注:
    • 統合ユーザー・レジストリーは、コンテキスト・プール・メカニズムを 使用して、LDAP サーバーへの並行アクセスのパフォーマンスを改善します。コンテキスト・プーリング は、接続プーリングよりも高いレベルで機能します。コンテキスト・プール内の各コンテキスト・エントリーが、LDAP サーバーへの 1 つのソケット接続に対応します。このプールによって使用されるバインド資格情報 は、LDAP レジストリーを構成するときに指定されます。
    • 統合リポジトリーは、パフォーマンス向上のためにキャッシュ・メカニズムを使用します。実行されるユーザー操作に基づいて、LDAP ユーザーおよびグループに関する情報をキャッシュに入れます。例えば、LDAP ユーザーおよびグループを対象に検索操作を実行すると、操作の結果がキャッシュに入れられます。前の例で示しているように、server.xml ファイル内で ldapCache エレメントを有効にできます。
    トラブルシューティングのヒント: LDAP 認証の問題をトラブルシューティングするには、bootstrap.properties ファイル内で以下のトレース仕様を使用してください。
    com.ibm.ws.security.wim.*=all:com.ibm.websphere.security.wim.*=all

トピックのタイプを示すアイコン タスク・トピック



タイム・スタンプ・アイコン 最終更新: Monday, 5 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-libcore-mp&topic=twlp_sec_ldap
ファイル名: twlp_sec_ldap.html