Java - Problema de conexion con LDAP

 
Vista:

Problema de conexion con LDAP

Publicado por Pepe (2 intervenciones) el 28/04/2009 12:11:30
Hola a todos.

Os comento mi problema a ver si alguien me puede ayudar.

Tengo los usuarios de mi active directory clasificados de la siguiente forma:

Éstos pueden tener como nombre distinguido:

cn=Pepito,ou=Usuarios,dc=miempresa,dc=es
cn=Manolito,ou=Jefes,dc=miempresa,dc=es

Como codigo para autenticar a los usuarios utilizo el siguiente codigo:

import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;

Hashtable env = new Hashtable(11);
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://myserver:389");
env.put(Context.SECURITY_AUTHENTICATION, "SIMPLE");
env.put(Context.SECURITY_PRINCIPAL, "Pepito");

env.put(Context.SECURITY_CREDENTIALS, "pepitopassword");
DirContext ctx = new InitialDirContext(env);

ctx.close();

Con este código no consigo validar ningún usuario. Si en lugar de utilizar Pepito como SECURITY_PRINCIPAL utilizo su nombre distinguido, es decir, cn=Pepito,ou=Usuarios,dc=miempresa,dc=es, si consigo validarlo.

Lo que quiero obtener es una forma generica de validar un usuario sin tener que utilizar su nombre distinguido, ya que, segun creo, para validar todos los usuarios tendría que hacer dos "bind" ya que los usuarios pueden estar como Usuarios y como Jefes. Os lo explico con un ejemplo.

Supongo que quiero validar a Pepito. Para ello tendría que hacer lo siguiente:

String usuario = "Pepito"; // Este campo se rellenaria con un valor de un formulario de login
Hashtable env = new Hashtable(11);
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://myserver:389");
env.put(Context.SECURITY_AUTHENTICATION, "SIMPLE");
env.put(Context.SECURITY_PRINCIPAL, "cn=" + usuario + ",ou=Jefes,dc=miempresa,dc=es");
env.put(Context.SECURITY_CREDENTIALS, "pepitopassword");
boolean correcto=false; 
try { 
DirContext ctx = new InitialDirContext(env);
ctx.close();
correcto=true;
}
if (!correcto) {
   env.put(Context.SECURITY_PRINCIPAL, "cn=" + usuario + ",ou=Usuarios,dc=miempresa,dc=es"); 
   DirContext ctx = new InitialDirContext(env);
   ctx.close(); 
}

¿Entendeis lo que os quiero explicar?
¿Existe alguna forma de validar los usuarios si tener que estar comprobando su nombre distinguido?
 
Muchas gracias a todos y un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema de conexion con LDAP

Publicado por Jose Miguel (1 intervención) el 02/02/2011 17:05:24
Muchas Gracias , funciona que te pasas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar