Verificar password con OpenLDap y Java

De ChuWiki

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();
		}

	}

}