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;
}
19
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