2011-06-10 26 views
19

Tengo un fragmento de código que funciona mediante el cual puedo autenticar a un usuario por dn y contraseña. Mi requisito es que el usuario ingrese su nombre de usuario (sAMAccountName) y deseo autenticarme usando sAMAccountName y contraseña. ¿Cómo puedo modificar este código para lograrlo?Autenticación Java LDAP con nombre de usuario y contraseña

String userName = "John P R-Asst General Manager"; 
    String passWord = "asdfgh123"; 
    String base ="OU=SOU,DC=example,DC=com"; 
    String dn = "cn=" + userName + "," + base; 

    String ldapURL = "ldap://mdsdc3.example.com:389"; 
    authEnv.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory"); 
    authEnv.put(Context.PROVIDER_URL, ldapURL); 
    authEnv.put(Context.SECURITY_AUTHENTICATION, "simple"); 
    authEnv.put(Context.SECURITY_PRINCIPAL, dn); 
    authEnv.put(Context.SECURITY_CREDENTIALS, password); 

    try { 
     DirContext authContext = new InitialDirContext(authEnv); 
     return true; 

    } catch (NamingException namEx) { 
     return false; 
    } 

Respuesta

2

¿Se puede tratar de completar Context.PROVIDER_URL así:

String ldapURL = "ldap://mdsdc3.example.com:389/DC=example,DC=com"; 

Creo que sería mejor utilizar GSSAPI, tal vez usted puede tener una mirada here y here

43

Espero que esto ayude muchos de ustedes.

No es necesario que toda jerarquía de usuario con CN, DN, etc.

Puede iniciar sesión de paso de dominio \ usuario y contraseña.

tengo mi código funciona como es abajo:

try 
    { 
     // Set up the environment for creating the initial context 
     Hashtable<String, String> env = new Hashtable<String, String>(); 
     env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
     env.put(Context.PROVIDER_URL, "ldap://ldap_server:389"); 
     // 
     env.put(Context.SECURITY_AUTHENTICATION, "simple"); 
     env.put(Context.SECURITY_PRINCIPAL, "domain\\user"); //we have 2 \\ because it's a escape char 
     env.put(Context.SECURITY_CREDENTIALS, "test"); 

     // Create the initial context 

     DirContext ctx = new InitialDirContext(env); 
     boolean result = ctx != null; 

     if(ctx != null) 
      ctx.close(); 

     return result; 
    } 
    catch (Exception e) 
    {   
     return false; 
    } 
Cuestiones relacionadas