Pregunta

Estoy utilizando Spring LDAP (1.3.1) para hablar con ADAM y Active Directory.

Cuando intento para autenticar a alguien usando ldapTemplate.authenticate () recibo errores vuelta a través de la devolución de llamada de error, pero da una excepción muy genérica AuthenticationException y no puedo extraer lo que es exactamente el problema:

  • Cuenta desactivada
  • contraseña ha caducado
  • debe cambiar la contraseña iniciar la próxima sesión
  • cuenta expiró
  • etc.

Todo lo que se obtiene es un detailMessage que supongo que es lo envía de vuelta AD. Algo así como:

org.springframework.ldap.AuthenticationException: código de error 49 - 8009030C: [LDAP: LdapErr: DSID-0C0903A9, comentario: AcceptSecurityContext error, los datos 773, v1db0

puedo ver 773 datos, lo que significa que el usuario debe cambiar la contraseña en el siguiente inicio de sesión. No quiero que analizar manualmente. ¿Hay alguna "adaptadores" No soy consciente de?

¿Alguien ha tenido este problema?

Muchas gracias!

¿Fue útil?

Solución

Este enlace listas de cómo los códigos de error LDAP se asignan a JNDI excepciones. Mirar el código LDAP de primavera, parece que la primavera mapea cada excepción JNDI para su excepción LDAP personalizado (LdapUtils.convertLdapException())

Ahora, parece 773 specfic a Active Directory. Por tanto, este debe ser manejada por el usuario de forma explícita, si es necesario. Este enlace listas un montón de errores de Active Directory. LDAP primavera proporcionaría este texto en sus detalles del error, dejando al usuario a utilizarlos como adecuado.

Otros consejos

si su código termina en PasswordPolicyAwareContextSource.getContext o en el código de primavera similares, la primavera no maneja muy bien (bug).
Cuando la cuenta está vencida se produce una excepción. la clase por encima de las capturas de esta excepción y después, y esta es la clave, que llama
PasswordPolicyResponseControl ctrl = PasswordPolicyControlExtractor.extractControl (CTX);
Primavera continuación, llama ctrl.isLocked (), pero no para comprobar si alguna de las otras condiciones. Debe reemplazar el código de la primavera, y se puede comprobar ctrl.isExpired (), ctrl.isChangeAfterReset (), y un montón de otros captadores de información están disponibles allí en ese momento

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top