- El DN (Distinguished Name) no esta en la ACL (Lista de control de Acceso) y por lo tanto no puede realizar ciertas consultas LDAP.
- DN fue bloqueado debido a demasiados intentos de conexión fallidos.
- La contraseña del DN puede haber sido cambiada.
- El servidor LDAP no puede permitir consultas anónimas.
- El filtro predeterminado en el servidor de aplicaciones pueden no ajustarse a la configuración de los clientes. (Es decir, no hay definido objectclass=someObjectClass).
- El Firewall no permite la comunicación con el puerto
- ID del administrador LDAP que se utiliza para la identificación del servidor, pero el ID del administrador no se define como un usuario normal
Por estos y muchos otros problemas de configuración
posibles la mejor forma de
depurar rápidamente el problema es
utilizar ldapsearch.
ldapsearch nos permite ver lo que está devolvinedo la consulta, normalmente
oculto por el Application Server.
La idea es utilizar las mismas opciones de configuración,
en la línea de comandos, como se ha definido en
consola
WAS > Security > user Registries > LDAP settings
Security Server ID
|
Nombre corto del identificador que
consulta el LDAP.
|
Security Server Password
|
Password del ID en el LDAP
|
Directory Type
|
Lista predefinida de servidores
LDAP soportados.
|
Host
|
Nombre de host del servidor LDAP. Puede ser el
nombre corto, largo nombre
o la dirección IP.
|
Port
|
389 es el puerto por defecto del
servidor LDAP
|
Base Distinguished Name
(BaseDN) |
Localización inicial de la
consulta LDAP
|
Bind Distinguished Name
(BindDN) |
Fully qualified DN que tiene la
autoridad de realizar “bind” en el servidor LDAP y realizar consultas. Algunos
servidores LDAP permiten consultas anónimas
|
Bind Password
|
Password de bind del DN’s
|
Propiedades avanzadas de LDAP
User Filter
|
String usado para consultar al
servidor LDAP.
|
User ID Map
|
Define que será mostrado en
WebSphere del resultado de la consulta.
|
ldapsearch
–h <Host> -p <Puerto> -b “<BaseDN>” –D <BindDN> -w
<Bind Password> “<User Filter>”
Ejemplos:
ldapsearch
–h mariano.ldap.server -p 389 -b "o=ibm,c=us" uid=test
cn=test,o=ibm,c=us
sn=test
objectclass=top
objectclass=organizationalPerson
objectclass=ePerson
objectclass=person
objectclass=inetOrgPerson
uid=test
cn=test
cn=test,o=ibm,c=us
sn=test
objectclass=top
objectclass=organizationalPerson
objectclass=ePerson
objectclass=person
objectclass=inetOrgPerson
uid=test
cn=test
ldapsearch
-h mariano.ldap.server -p 389 -b "o=ibm,c=us"
"(&(uid=test)(objectclass=ePerson))"
cn=test,o=ibm,c=us
sn=test
objectclass=top
objectclass=organizationalPerson
objectclass=ePerson
objectclass=person
objectclass=inetOrgPerson
uid=test
cn=test
cn=test,o=ibm,c=us
sn=test
objectclass=top
objectclass=organizationalPerson
objectclass=ePerson
objectclass=person
objectclass=inetOrgPerson
uid=test
cn=test
La consulta de ldapsearch podría causar una excepción para el servidor de aplicaciones:
A continuación fallaría en Application Server porque el filtro de búsqueda está buscando un objectclass de "XYZ", pero no hay objectclass "XYZ" definido LDAP. Esto da como resultado una cadena de retorno vacío.
A continuación fallaría en Application Server porque el filtro de búsqueda está buscando un objectclass de "XYZ", pero no hay objectclass "XYZ" definido LDAP. Esto da como resultado una cadena de retorno vacío.
ldapsearch
-h mariano.ldap.server -p 389 -b "o=ibm,c=us"
"(&(uid=test)(objectclass=XYZ))"
La siguiente busqueda fallaría en el Application Server
porque 2 DN se
devuelven en lugar de 1. Application Server sólo se autenticará utilizando un único DN. Si la consulta es
uid=test en lugar de cn=test, entonces sólo un DN habría sido devuelto.
ldapsearch
-h mariano.ldap.server -p 389 -b "o=ibm,c=us"
"(&(cn=test)(objectclass=ePerson))"
cn=test,o=ibm,c=us
sn=test
objectclass=top
objectclass=organizationalPerson
objectclass=ePerson
objectclass=person
objectclass=inetOrgPerson
uid=test
cn=test
cn=test,ou=Larry's Group,ou=Austin,o=ibm,c=us
sn=User
objectclass=top
objectclass=organizationalPerson
objectclass=ePerson
objectclass=person
objectclass=inetOrgPerson
cn=Test
cn=test,o=ibm,c=us
sn=test
objectclass=top
objectclass=organizationalPerson
objectclass=ePerson
objectclass=person
objectclass=inetOrgPerson
uid=test
cn=test
cn=test,ou=Larry's Group,ou=Austin,o=ibm,c=us
sn=User
objectclass=top
objectclass=organizationalPerson
objectclass=ePerson
objectclass=person
objectclass=inetOrgPerson
cn=Test
Troubleshooting basico
Referencias de error SECJ0369E y SECJ0055E se pueden
generar en el SystemOut.log. Hay, sin embargo, diversas causas de raíz que se pueden derivar de los valores que siguen a la descripción inicial. Un ejemplo se muestra a continuación.
[date/time]
0000000a LdapRegistryI A SECJ0419I: The user registry is currently connected to
the LDAP server ldap://<hostname>:389.
[date/time] 0000000a LTPAServerObj E SECJ0369E: Authentication failed when using LTPA. The exception is [LDAP: error code 49 - 80090308: LdapErr: DSID-0C090334, comment: AcceptSecurityContext error, data 775, vece ].
[date/time] 0000000a distContextMa E SECJ0270E: Failed to get actual credentials. The exception is javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C090334, comment: AcceptSecurityContext error, data 775, vece ]
at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3005)
-->
80090308:
LdapErr: DSID-0C09030B, comment: AcceptSecurityContext error, data 525,
v893 [date/time] 0000000a LTPAServerObj E SECJ0369E: Authentication failed when using LTPA. The exception is [LDAP: error code 49 - 80090308: LdapErr: DSID-0C090334, comment: AcceptSecurityContext error, data 775, vece ].
[date/time] 0000000a distContextMa E SECJ0270E: Failed to get actual credentials. The exception is javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C090334, comment: AcceptSecurityContext error, data 775, vece ]
at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3005)
Errores comunes de bind en Active Directory LDAP
HEX: 0x525 - user not found
DEC: 1317 - ERROR_NO_SUCH_USER (The specified account does not exist.)
NOTA: lo devuelve cuando el usuario no existe
80090308: LdapErr: DSID-0C09030B, comment: AcceptSecurityContext error, data 52e, v893
HEX: 0x52e - invalid credentials
DEC: 1326 - ERROR_LOGON_FAILURE (Logon failure: unknown user name or bad password.)
NOTA: Lo devuelve cuando el usuario es valido, pero las credenciales/password es invalido.
80090308: LdapErr: DSID-0C09030B, comment: AcceptSecurityContext error, data 530, v893
HEX: 0x530 - not permitted to logon at this time
DEC: 1328 - ERROR_INVALID_LOGON_HOURS (Logon failure: account logon time restriction violation.)
NOTA: Lo devuelve solo cuando se presenta con un usuario y credenciales validas.
80090308: LdapErr: DSID-0C09030B, comment: AcceptSecurityContext error, data 531, v893
HEX: 0x531 - not permitted to logon from this workstation
DEC: 1329 - ERROR_INVALID_WORKSTATION (Logon failure: user not allowed to log on to this computer.)
LDAP[userWorkstations: <multivalued list of workstation names>]
NOTA: Lo devuelve solo cuando se presenta con un usuario y credenciales validas.
80090308: LdapErr: DSID-0C09030B, comment: AcceptSecurityContext error, data 532, v893
HEX: 0x532 - password expired
DEC: 1330 - ERROR_PASSWORD_EXPIRED (Logon failure: the specified account password has expired.)
LDAP[userAccountControl: <bitmask=0x00800000>] - PASSWORDEXPIRED
NOTA: Lo devuelve solo cuando se presenta con un usuario y credenciales validas.
80090308: LdapErr: DSID-0C09030B, comment: AcceptSecurityContext error, data 533, v893
HEX: 0x533 - account disabled
DEC: 1331 - ERROR_ACCOUNT_DISABLED (Logon failure: account currently disabled.)
LDAP[userAccountControl: <bitmask=0x00000002>] - ACCOUNTDISABLE
NOTE: Returns only when presented with valid username and password/credential.
80090308: LdapErr: DSID-0C09030B, comment: AcceptSecurityContext error, data 701, v893
HEX: 0x701 - account expired
DEC: 1793 - ERROR_ACCOUNT_EXPIRED (The user's account has expired.)
LDAP[accountExpires: <value of -1, 0, or extemely large value indicates account will not expire>] - ACCOUNTEXPIRED
NOTE: Lo devuelve solo cuando se presenta con un usuario y credenciales validas.
80090308: LdapErr: DSID-0C09030B, comment: AcceptSecurityContext error, data 773, v893
HEX: 0x773 - user must reset password
DEC: 1907 - ERROR_PASSWORD_MUST_CHANGE (The user's password must be changed before logging on the first time.)
LDAP[pwdLastSet: <value of 0 indicates admin-required password change>] - MUST_CHANGE_PASSWD
NOTE: Lo devuelve solo cuando se presenta con un usuario y credenciales validas.
80090308: LdapErr: DSID-0C09030B, comment: AcceptSecurityContext error, data 775, v893
HEX: 0x775 - account locked out
DEC: 1909 - ERROR_ACCOUNT_LOCKED_OUT (The referenced account is currently locked out and may not be logged on to.)
LDAP[userAccountControl: <bitmask=0x00000010>] - LOCKOUT
NOTE: Lo devuelve solo si presentas password invalidos.