Authentification Java LDAP à l'aide d'un nom d'utilisateur et d'un mot de passe


J'ai un extrait de code de travail par lequel je peux authentifier un utilisateur par dn et mot de passe. Mon exigence est que l'utilisateur entre son nom d'utilisateur(sAMAccountName) et je veux m'authentifier en utilisant sAMAccountName et mot de passe. Comment puis-je modifier ce code pour y parvenir?

    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;
    }
Author: ROMANIA_engineer, 2011-06-10

2 answers

J'espère que cela aidera beaucoup d'entre vous.

Vous n'avez pas besoin de toute la hiérarchie des utilisateurs avec CN, DN, etc.

Vous pouvez vous connecter en passant simplement domain\user et password.

J'ai mon code qui fonctionne comme il est ci-dessous:

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;
    }
 44
Author: Paulo Martins, 2012-06-01 01:15:35

Pouvez-vous essayer de terminer Context.PROVIDER_URL comme ceci :

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

Je Pense qu'il serait préférable d'utiliser GSSAPI, peut-être vous pouvez avoir un coup d'oeil ici et ici

 2
Author: JPBlanc, 2011-06-10 14:07:45