Advertising:
Verificar password con OpenLDap y Java
Jump to navigation
Jump to search
En OpenLDAP la clave se puede guardar encriptada en SSHA. Por ello, verificar desde java si una password en claro es o no correcta, puede ser algo tedioso. Aquí un pequeño ejemplo de cómo hacerlo
Necesitamos la clase SSHA de aquí SSHA.java y la librería Java LDAP
package com.chuidiang.ejemplos; import java.io.UnsupportedEncodingException; import com.novell.ldap.LDAPAttribute; import com.novell.ldap.LDAPConnection; import com.novell.ldap.LDAPEntry; import com.novell.ldap.LDAPException; import com.novell.ldap.LDAPSearchResults; public class PruebaLDap { /** * @param args */ public static void main(String[] args) { try { // Conexion con ldap, aqui se usa el administrador, deberia usarse // una cuenta con menos privilegios, pero con acceso. LDAPConnection lc = new LDAPConnection(); // Servidor y puerto ldap lc.connect("servidor_ldap", 389); lc.bind(LDAPConnection.LDAP_V3, "cn=administrator,dc=compania,dc=es", "paswordAdministrador".getBytes("UTF8")); // Se consultan los atributos de un usuario deteriminado, // operador2 en este caso. int searchScope = LDAPConnection.SCOPE_BASE; String searchFilter = "Objectclass=*"; LDAPSearchResults searchResults = lc.search( "uid=operador2,ou=people,dc=compania,dc=es", searchScope, searchFilter, null, // return all attributes false); // return attrs and values // se busca su password encriptada LDAPEntry Entry = searchResults.next(); LDAPAttribute laPassword = Entry.getAttribute("userPassword"); // Con la clase SSHA se verifica si la password en claro coincide con la encriptada SSHA ssha = SSHA.getInstance(); boolean si = ssha.checkDigest(laPassword.getStringValue(), "passwordOperador2"); // ¡¡ Albricias si coincide !! if (si) { System.out.println("albricias"); } else { System.out.println("La has cagao"); } } catch (LDAPException e) { System.out.println("Error: " + e.toString()); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } }