Configuración de registros de usuarios LDAP en Liberty
Puede configurar uno o más servidores LDAP (Lightweight Directory Access Protocol) con Liberty para la autenticación.
Antes de empezar
Acerca de esta tarea
Puede utilizar un servidor LDAP existente para la autenticación de aplicaciones en Liberty. Hay que añadir la característica appSecurity-2.0 a server.xml y especificar la característica ldapRegistry-3.0 en el archivo server.xml, y la información de configuración para conectar con el servidor LDAP.
Procedimiento
- Añada las características de Liberty appSecurity-2.0 y ldapRegistry-3.0 al archivo server.xml.
- Opcional: Para comunicarse con un servidor LDAP habilitado para SSL, añada la característica de Liberty ssl-1.0 en el archivo server.xml.
- Opcional: Copie el almacén de confianza en el directorio de configuración del servidor. Por ejemplo, puede utilizar la variable ${server.config.dir}.
Para que la comunicación SSL con un servidor LDAP sea satisfactoria, se debe añadir el certificado de firmante para el servidor LDAP al almacén de confianza al que el atributo sslAlias del elemento <ldapRegistry> hace referencia. En los ejemplos siguientes, se debe añadir el certificado de firmante a LdapSSLTrustStore.jks.
- Configure la entrada LDAP para el servidor.
Si no desea SSL para el servidor LDAP, elimine todas las líneas de SSL y relacionadas con el almacén de claves de los ejemplos siguientes.
Configure el servidor LDAP en el archivo server.xml o utilizando WebSphere Application Server Developer Tools for Eclipse. Hay varios ejemplos de configuración se seguridad en el sitio web de WASdev.net que sirven de referencia cuando se configura la seguridad para sus aplicaciones en Liberty.- Para 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="(&(uid=%v)(objectclass=ePerson))" groupFilter="(&(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=" />
- Para 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="(&(sAMAccountName=%v)(objectcategory=user))" groupFilter="(&(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=" />
Si utiliza WebSphere Application Server Developer Tools for Eclipse, la contraseña bindPassword se codifica automáticamente. Si edita el archivo server.xml directamente, puede utilizar el mandato securityUtility encode para codificar la contraseña bindPassword automáticamente. La herramienta de línea de mandatos securityUtility está disponible en el directorio $INSTALL_ROOT/bin. Cuando ejecuta el mandato securityUtility encode, debe proporcionar la contraseña para codificarse como una entrada en la línea de mandatos o, si no se especifican argumentos, el programa de utilidad le solicitará la contraseña. A continuación, la herramienta genera el valor codificado. Copie el valor de salida de la herramienta y utilice dicho valor para la contraseña de bindPassword.
- Para IBM® Directory Server:
- Opcional: Configure la modalidad de filtro de certificado para el servidor LDAP.
Para obtener más información sobre la modalidad de correlación de certificados en Liberty, consulte Modalidad de correlación de certificados 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="(&(uid=%v)(objectclass=ePerson))" groupFilter="(&(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>
- Opcional: Puede definir la correlación entre atributos LDAP y los
atributos de esquema del registro de usuario.
Una vez que se haya configurado la correlación, cuando se utiliza el atributo de registro de usuarios para cualquier operación para la cual se ha definido la correlación, el valor del atributo del registro de usuarios será el valor del atributo LDAP. En el ejemplo siguiente, puede ver que la correlación está definida para el atributo LDAP <userPassword> con la propiedad del registro de usuarios <password> en el archivo server.xml. El atributo <defaultValue> es opcional.
<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>
- Opcional: Puede definir la correlación entre los atributos LDAP y el atributo <externalId> del registro de usuarios.
Puede definir la correlación entre los atributos LDAP y el atributo <externalId> del registro de usuarios. Después de configurar la correlación, cuando se utiliza el atributo <externalId> de registro de usuarios para cualquier operación, el valor será el equivalente al valor del atributo LDAP que se correlaciona. El código de ejemplo siguiente muestra la correlación que se ha definido para el atributo <externalId> del registro de usuarios con el atributo <distinguishedName> LDAP para el tipo de entidad <PersonAccount>. El atributo <autoGenerate> es opcional y el valor es false de forma predeterminada.
<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>
- Opcional: Configure la migración tras error para varios servidores 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="(&(uid=%v)(objectclass=ePerson))" groupFilter="(&(cn=%v)(|(objectclass=groupOfNames) (objectclass=groupOfUniqueNames)(objectclass=groupOfURLs)))" userIdMap="*:uid" groupIdMap="*:cn" groupMemberIdMap="ibm-allGroups:member;ibm-allGroups:uniqueMember; groupOfNames:member;groupOfUniqueNames:uniqueMember"> </idsLdapFilterProperties>
Para obtener más información acerca de los elementos ldapRegistry y failoverServers, consulte la sección Registro de usuarios LDAP.
- Opcional: Configure varios registros LDAP. Si se configuran varios registros LDAP en el archivo
server.xml, se federan automáticamente. Asegúrese de que los usuarios son exclusivos entre todos los
repositorios federados, de lo contrario, las operaciones del registro
de usuarios no se realizan correctamente. Nota: Cuando se utilizan varios repositorios LDAP federados, cada repositorio debe definir un baseDN exclusivo.
<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>
Nota:- Es recomendable, pero no obligatorio, especificar el elemento federatedRepository para federar varios registros LDAP, porque se federan automáticamente. Si se especifica el elemento federatedRepository para configurar los elementos participatingBaseEntry y primaryRealm, las operaciones del registro de usuarios se realizan solo en los repositorios definidos en el elemento primaryRealm. Puede definir las correlaciones de propiedades de entrada y salida para distintas API de registro de usuarios en el elemento primaryRealm.
- El atributo name del elemento participatingBaseEntry debe ser el mismo que el valor del atributo baseDN especificado en el elemento ldapRegistry. En el ejemplo que figura a continuación, se configuran los atributos baseDN y name para el registro LDAP en el host ldapserver1.mycity1.mycompany.com. El valor del atributo baseDN debe ser el mismo que el subárbol del servidor LDAP y el valor del atributo name debe ser igual que el del subárbol del registro de usuarios federado. Es opcional especificar el atributo name. De forma predeterminada, el atributo name utiliza el mismo valor que el atributo baseDN. Si se especifica el atributo name en el elemento ldapRegistry, el atributo name del elemento participatingBaseEntry debe utilizar el mismo valor que el atributo name del elemento ldapRegistry.
<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>
Para obtener más información sobre los elementos ldapRegistry federados, consulte Registro de usuarios LDAP.
- Opcional: Puede configurar otros atributos opcionales para el registro LDAP, como
contextPool o ldapCache, como se muestra en el
ejemplo siguiente:
<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>
Nota:- El registro de usuarios federado utiliza el mecanismo de agrupación de contextos para mejorar el rendimiento del acceso simultáneo a un servidor LDAP. La agrupación de contextos funciona a un nivel superior que la agrupación de conexiones. Cada entrada de contexto de la agrupación de contexto en una conexión de socket con el servidor LDAP. Las credenciales de enlace utilizadas por esta agrupación se especifican al configurar el registro LDAP.
- El repositorio federado utiliza el mecanismo de almacenamiento en memoria caché para mejorar el rendimiento. Almacena información en la memoria caché acerca de los usuarios y grupos LDAP basados en las operaciones realizadas por el usuario. Por ejemplo, si realiza una operación de búsqueda de los usuarios y grupos LDAP, el resultado de la operación se almacena en memoria caché. Puede habilitar el elemento ldapCache en el archivo server.xml como se muestra en el ejemplo anterior.
Sugerencia de resolución de problemas: Para resolver los problemas de autenticación LDAP, utilice las especificaciones de rastreo siguientes del archivo bootstrap.properties:com.ibm.ws.security.wim.*=all:com.ibm.websphere.security.wim.*=all
- Opcional:
La configuración SSL que se utiliza para conectarse al servidor LDAP se puede determinar en la configuración SSL, en lugar de especificarse con el atributo sslRef. El atributo sslEnabled se debe establecer en true.
Si sslRef no se especifica, el código SSL busca si existe un filtro de salida que coincida con el host y el puerto LDAP, o si se debe utilizar la salida SSL predeterminada. Si desea más información sobre las opciones SSL de salida, consulte Configuración de valores SSL para las comunicaciones de salida. Si desea más información sobre filtros de salida, consulte Filtros de salida para configuraciones SSL
<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" > <idsFilters userFilter="(&(uid=%v)(objectclass=ePerson))" groupFilter="(&(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>
Subtemas
- Modalidad de correlación de certificados LDAP
La modalidad de correlación de certificados se utiliza para especificar si se correlacionan los certificados X.509 en un directorio LDAP mediante EXACT_DN o CERTIFICATE_FILTER en Liberty.

Nombre de archivo: twlp_sec_ldap.html