Hola a todos,
Tengo un LDAP con entradas de usuario. Necesito comprobar si un usuario (uid) existe y si coincide la password con una recibida por parámetro.
He intentado obtener el atributo userPassword pero creo que no se puede leer, aunque tengo una acl creada para dar permisos de lectura:
access to attr=userpassword
by self write
by * read
Por otro lado he intentado a través del siguiente método realizar la autenticacion, pero me da "invalid credentials".
Hashtable env = new Hashtable();
env.put Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, providerURL );
if (ldapSeguro)
env.put(Context.SECURITY_PROTOCOL, "ssl");
env.put("java.naming.ldap.version", ldapVersion);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, new String("uid=pepe,o=usuarios, dc=orizom,dc=com"));
env.put(Context.SECURITY_CREDENTIALS, clave);
// Si al inicializar estos valores no se levanta una excepción
// entonces la autenticación es OK
DirContext ctx = new InitialDirContext(env);
ctx.close();
// Sólo si todo va bien el resultado es correcto.
resultado=true;
La entrada en ldiff es la siguiente:
dn: uid=pepe,o=usuarios, dc=orizom,dc=com
mailMessageStore: /buzones/o/oabad
sn: ABAD CASTILLO
userPassword:: e2NyeXB0fWFhbndJZkVqVndFLkE=
.
.
Y parece que para crearla en el LDAP la encripta y en el browser aparece algo asi: {CRYPT}268aU2miwExkc
No tengo ningún problema al recuperar la entrada a traves del uid, pero no puedo comprobar el password ni obteniendo el atributo ni tratando de logarme a través de este método.
¿Alguien sabe cuál es la forma correcta de hacerlo? ¿O cómo encripta LDAP? ¿Debo enviar a "env.put(Context.SECURITY_CREDENTIALS, clave)" la clave encriptada o sin encriptar?
Si alguien me pudiera dar alguna pistita, ejemplo, o algo.
Muchas gracias por vuestra ayuda.