Validación LDAP


1. Entrar al sistema LDAP, con el usuario de administrador
2. Utilizar el acceso que se tiene para validar el usuario/password (Ldap hace eso)
3. Trabajar con ese usuario

Código (java)

import java.util.Hashtable;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.InitialLdapContext;

public class LdapTest {
public static boolean validateUser(
InitialLdapContext ctx, String user, String password) {
DirContext dirContext = null;

try {
Hashtable environment = (Hashtable) ctx.getEnvironment().clone();
environment.put(Context.SECURITY_PRINCIPAL, user);
environment.put(Context.SECURITY_CREDENTIALS, password);

// Define el contexto del usuario
dirContext = new InitialDirContext(environment);
System.out.println("Ahhhh HUEVO KBN!!");
} catch (NamingException e) {
System.out.println(e.getMessage());
return false;
}
return true;

}
    public static void processRequest(InitialLdapContext ctx, String userContext, String filter, String attribute) {
        SearchControls searchControls = new SearchControls();
        searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);

        NamingEnumeration<SearchResult> searchResults;
        try {
            searchResults = ctx.search(userContext, filter, searchControls);
             
            while (searchResults.hasMoreElements()) {
                SearchResult sr = searchResults.next();
                Attributes attributes = sr.getAttributes();
                Attribute a = attributes.get(attribute);
                if (a != null) {
                    String attrValue = (a.get().toString());
                    System.out.println(attrValue);
                } else {
                    System.out.println("Dato no existe");
                }
            }
        } catch (NamingException e) {
            e.printStackTrace();
        }
    }
         
    private static InitialLdapContext initialiaseLdapContext(String server, int port, String manager, String password) {
        boolean initialised = false
        Properties properties = new Properties();
        properties.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        properties.put(Context.PROVIDER_URL, "ldap://" + server + ":"+ port);
        properties.put(Context.SECURITY_AUTHENTICATION, "simple");
        properties.put(Context.SECURITY_PRINCIPAL, manager);
        properties.put(Context.SECURITY_CREDENTIALS, password);

        InitialLdapContext ctx = null;
        try {
            // Create initial context
            ctx = new InitialLdapContext(properties, null);
            initialised = true;
        } catch (NamingException e) {
            initialised = false;
        } finally {
            if (initialised) {
                System.out.println("Buen acceso");
            } else {
                System.out.println("Falla en acceso");
            }
        }
        return ctx;
    }

    //TODO cambiar todo lo que hay entre <! .. >
    public static void main(String[] args) {
    String url = "<!local>"// url de tu ldap
    int port = 389; // puerto más común, pero puede ser cualquiera
    String manager = "<!administrador de ldap>";
    String managerPassword = "<!password de administrador>";
    
    String user = "<!usuario a probar>";
    String domain = "@<!dominio del usuario>";
    String password = "<!password del usuario a probar";
     String userContext = "dc=<contextoA>, dc=<contextoB>";
    
        InitialLdapContext ctx = null;
        try {
            ctx = initialiaseLdapContext(url, port, manager, managerPassword);
            if (ctx != null) {
                // valida el acceso de tu usuario
                if (validateUser(ctx,user+domain,password)) {
                    // url de tu ldap
                 processRequest(ctx, userContext, "(<!parámetro LDAP con el que se reconoce el usuario>="+user+")""<!cualquier parámetro del LDAP que se desea obtener>");
                    
                    /* se trabaja con el usuario
                    * se trabaja con el usuario
                    * se trabaja con el usuario */

                } else {
                    System.out.println("No se reconoce usuario/password");
                }
                ctx.close();
            }
        } catch (NamingException e) {
            e.printStackTrace();
        }
    }

}

Comentarios