web-dev-qa-db-fra.com

Java Authentification LDAP à l'aide du nom d'utilisateur et du 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 saisisse son nom d'utilisateur (sAMAccountName) et je veux m'authentifier en utilisant sAMAccountName et son 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;
    }
19
Andromeda

J'espère que cela aide 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 domaine\utilisateur et mot de passe.

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;
    }
45
Paulo Martins

Pouvez-vous essayer de terminer Context.PROVIDER_URL comme ça :

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

Je pense qu'il serait préférable d'utiliser GSSAPI, peut-être pouvez-vous y jeter un œil ici et ici

2
JPBlanc