Liberty에서 LDAP 사용자 레지스트리 구성

Liberty에서 인증을 위한 LDAP(Lightweight Directory Access Protocol) 서버를 하나 이상 구성할 수 있습니다.

시작하기 전에

LDAP 서버가 작동 및 실행 중인지와 사용자가 알고 있는 목록에 LDAP 서버의 호스트 이름과 포트 번호가 있는지를 확인하십시오.

이 태스크 정보

Liberty에서 애플리케이션 인증에 기존 LDAP 서버를 사용할 수 있습니다. 이를 수행하기 위해 appSecurity-2.0 기능을 server.xml 파일에 추가하고 server.xml 파일에서 ldapRegistry-3.0 기능 및 LDAP 서버 연결을 위한 구성 정보를 지정합니다.

문제점 예방: WASdev.net 웹 사이트에는 Liberty의 애플리케이션을 위한 보안을 구성할 때 참조할 수 있는 여러 보안 구성 예가 있습니다. 자세한 정보는 구성 스니펫에 대한 관련 참조의 링크를 참조하십시오.

프로시저

  1. appSecurity-2.0ldapRegistry-3.0 Liberty 기능을 server.xml 파일에 추가하십시오.
  2. 옵션: SSL 사용 LDAP 서버와 통신하려면 ssl-1.0 Liberty 기능을 server.xml 파일에 추가하십시오.
  3. 옵션: 신뢰 저장소를 서버 구성 디렉토리에 복사하십시오. 예를 들어, ${server.config.dir} 변수를 사용할 수 있습니다.

    LDAP 서버와의 SSL 통신에 성공하기 위해서는 <ldapRegistry> 요소의 sslAlias 속성이 참조하는 신뢰 저장소에 LDAP 서버의 서명자 인증서를 추가해야 합니다. 다음 예제에서는 서명자 인증서를 LdapSSLTrustStore.jks에 추가해야 합니다.

  4. 서버의 LDAP 항목을 구성하십시오.

    LDAP 서버에 SSL을 사용하지 않으려면 다음 예제에서 SSL과 키 저장소 관련 행을 모두 제거하십시오.

    server.xml 파일에서 또는 WebSphere® Application Server Developer Tools for Eclipse를 사용하여 LDAP 서버를 구성합니다. WASdev.net 웹 사이트에는 Liberty의 애플리케이션을 위한 보안을 구성할 때 참조할 수 있는 여러 보안 구성 예가 있습니다.
    • 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의 인증서 맵 모드에 대한 자세한 정보는 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>

    ldapRegistryfailoverServers 요소에 관한 자세한 정보는 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 레지스트리는 자동으로 연합되므로 여러 LDAP 레지스트리를 연합하기 위해 federatedRepository 요소를 지정할 필요는 없습니다. participatingBaseEntryprimaryRealm 요소를 구성하기 위해 federatedRepository 요소가 지정되는 경우, 사용자 레지스트리 조작은 primaryRealm 요소에서 정의되는 저장소에 대해서만 수행됩니다. primaryRealm 요소에서 여러 사용자 레지스트리 API에 대한 입력 및 출력 특성 맵핑을 정의할 수 있습니다.
    • participatingBaseEntry 요소의 name 속성은 ldapRegistry 요소에 지정된 baseDN 속성 값과 동일합니다. 아래 예에서는 ldapserver1.mycity1.mycompany.com 호스트의 LDAP 레지스트리에 대해 baseDNname 속성이 구성됩니다. baseDN 속성의 값은 LDAP 서버의 하위 트리 값과 같아야 하며 name 속성의 값은 연합된 사용자 레지스트리의 하위 트리 이름과 같아야 합니다. name 속성을 지정하는 것은 선택사항입니다. 기본적으로, name 속성은 baseDN 속성과 동일한 값을 사용합니다. name 속성이 ldapRegistry 요소에 지정되면, 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"
            		location="TransportSecurityClient.war"
            		location="TransportSecurityClient.war"
            		location="TransportSecurityClient.war"
            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 서버의 소켓 연결에 해당합니다. LDAP 레지스트리를 구성할 때 이 풀에서 사용되는 바인드 신임 정보가 지정됩니다.
    • 연합 저장소는 성능 향상을 위해 캐시 메커니즘을 사용합니다. 수행되는 사용자 조작을 기반으로 LDAP 사용자 및 그룹에 관한 정보를 캐시합니다. 예를 들어 LDAP 사용자 및 그룹에 대한 검색 조작을 수행하는 경우 조작 결과가 캐시됩니다. 이전 예에서 보는 것처럼 server.xml 파일에서 ldapCache 요소를 사용으로 설정할 수 있습니다.
    문제점 해결 팁: LDAP 인증 문제를 해결하려면 bootstrap.properties 파일에서 다음 추적 스펙을 사용하십시오.
    com.ibm.ws.security.wim.*=all:com.ibm.websphere.security.wim.*=all

주제의 유형을 표시하는 아이콘 태스크 주제



시간소인 아이콘 마지막 업데이트 날짜: Tuesday, 6 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twlp_sec_ldap
파일 이름: twlp_sec_ldap.html