LDAP: code d'erreur 49 - 80090308: LdapErr: DSID-0C0903A9, commentaire: erreur AcceptSecurityContext, données 52e, v1db1
Je sais que le code "52e" correspond à la validité du nom d'utilisateur, mais le mot de passe est invalide. J'utilise le même nom d'utilisateur et le même mot de passe dans mon studio Apache. J'ai pu établir la connexion avec LDAP avec succès.
Voici mon code Java
String userName = "*******";
String password = "********";
String base ="DC=PSLTESTDOMAIN,DC=LOCAL";
String dn = "cn=" + userName + "," + base;
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.Sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://******");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, dn);
env.put(Context.SECURITY_CREDENTIALS, password);
LDAPAuthenticationService ldap = new LDAPAuthenticationService();
// LdapContext ctx;
DirContext ctx = null;
try {
ctx = new InitialDirContext(env);
mon erreur est sur cette ligne: ctx = new InitialDirContext(env);
Je ne sais pas ce qui cause exactement cette erreur.
data 52e - Retourne lorsque le nom d'utilisateur est valide mais que le mot de passe/identifiant est invalide.
Vous avez probablement besoin de quelque chose comme
String dn = "cn=" + userName + "," + "CN=Users," + base;
Pour moi, le problème a été résolu lorsque j'ai défini la section principale comme suit:
env.put(Context.SECURITY_PRINCIPAL, userId@domainWithoutProtocolAndPortNo);
52e 1326 ERROR_LOGON_FAILURE Renvoie lorsque le nom d'utilisateur est valide mais que le mot de passe/identifiant est invalide. Empêche la plupart des autres erreurs de s'afficher comme indiqué.
http://ldapwiki.com/wiki/Common%20Active%20Directory%20Bind%20Errors
Lorsque vous utilisez Context.SECURITY_AUTHENTICATION en tant que "simple", vous devez fournir la valeur de l'attribut userPrincipalName (user @ domain_base).
J'ai eu un problème similaire lors de l'utilisation de AD sur CAS, erreur 52e. Dans mon cas, l'application accepte le nom complet sous la forme CN = au lieu du nom d'utilisateur actuel.
Par exemple, si vous avez un utilisateur dont le nom complet est Ross Butler et son nom d'utilisateur de connexion est rbutler - vous devez normalement mettre quelque chose comme, cn = rbutler, ou = Users, dc = domaine, dc = com, mais le nôtre échoue à chaque fois. En changeant cela en cn = Ross Butler, ou = Utilisateurs, dc = domaine, dc = com, il est passé !!
Dans mon cas, je dois utiliser quelque chose comme @ pour réussir la connexion.
sample_user @ sample_domain
Pour moi, le problème est résolu en ajoutant le nom de domaine au nom d'utilisateur comme suit:
string userName="yourUserName";
string password="passowrd";
string hostName="LdapServerHostName";
string domain="yourDomain";
System.DirectoryServices.AuthenticationTypes option = System.DirectoryServices.AuthenticationTypes.SecureSocketsLayer;
string userNameWithDomain = string.Format("{0}@{1}",userName , domain);
DirectoryEntry directoryOU = new DirectoryEntry("LDAP://" + hostName, userNameWithDomain, password, option);
si vous déboguez et regardez ctx = null, peut-être que votre nom d'utilisateur a un problème, vous devriez écrire comme "ac\administrateur" (double "\") ou "administrateur @ ac"
LDAP tente de s'authentifier auprès de AD lors de l'envoi d'une transaction à une autre base de données de serveur. Cette authentification échoue car l'utilisateur a récemment changé son mot de passe, bien que cette transaction ait été générée à l'aide des informations d'identification précédentes. Cette authentification continuera d'échouer jusqu'à ... sauf si vous modifiez le statut de la transaction sur Terminé ou sur Annuler, auquel cas LDAP cessera d'envoyer ces transactions.
Pour moi, le problème est résolu en changeant les envs comme ceci:
env.put("LDAP_BASEDN", base)
env.put(Context.SECURITY_PRINCIPAL,"user@domain")