web-dev-qa-db-fra.com

Comment trouver les bons paramètres LDAP

Je travaille actuellement sur un petit projet avec Active Directory et quelques éléments LDAP .... Je tente de me connecter au serveur LDAP et cela me donne toujours la même erreur: 

[LDAP: error code 49 - 80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db1

Autant que je sache, cela signifie que les informations d'identification sont fausses, mais je suis tout à fait sûr qu'elles ont raison!

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://libertycity.ch:389/dc=libertycity,dc=ch");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_CREDENTIALS, password);
env.put(Context.SECURITY_PRINCIPAL, "uid=" + username + ",ou=Users");
env.put("Java.naming.ldap.attributes.binary", "objectSID");

DirContext ctx = new InitialDirContext(env);

Je pense que mon code est correct ou ai-je oublié quelque chose? Quel pourrait être le problème et comment puis-je le savoir?

10
muffin

La valeur "data 52e" fournie dans l'erreur implique que la liaison a échoué pour les raisons suivantes: Renvoie lorsque le nom d'utilisateur est valide mais que le mot de passe/identifiant est invalide.

http://ldapwiki.com/wiki/Common%20Active%20Directory%20Bind%20Errors

17
jwilleke

Ce problème peut également survenir si le domaine complet n'est pas inclus avec le nom d'utilisateur.

Définissez le principal de sécurité sur username@domain.

InitialLdapContext ldapContext = new InitialLdapContext();
ldapContext.addToEnvironment(Context.INITIAL_CONTEXT_FACTORY, "com.Sun.jndi.ldap.LdapCtxFactory");
ldapContext.addToEnvironment(Context.SECURITY_AUTHENTICATION, "simple");
ldapContext.addToEnvironment(Context.SECURITY_PRINCIPAL, userId + "@mydomain.com");
ldapContext.addToEnvironment(Context.SECURITY_CREDENTIALS, password);                  
ldapContext.addToEnvironment(Context.PROVIDER_URL, "ldap://" + ldapHost + ":" + ldapPort);
10
Steven Wolfe

J'ai eu des problèmes en essayant de sécuriser une connexion de wildfly à un serveur Microsoft Active Directory, le principal problème est de ne pas savoir quelle chaîne de connexion devrait être.
Si vous installez 'l'explorateur Active Directory' de Sysinternals, le kit fourni est fourni par Microsoft. Recherchez l'objet que vous souhaitez lier, un paramètre 'Chemin:' sera affiché. C'est la chaîne de valeurs que vous devez citer dans l'argument de la valeur Context.SECURITY_PRINCIPAL . Dans mon cas, la chaîne de chemin d'accès était au format 

CN = Fred Blogs, OU = XXX utilisateurs, DC = foo-bar, DC = com, xxx.foo-bar.com: 389 [xxx.foo-bar.com]]

L'argument requis serait 

"CN = Blogs Fred, OU = utilisateurs XXX, DC = foo-bar, DC = com"

S'il vous plaît noter que les espaces sont très importants

2
Dave

Le code d'erreur LDAP 49 indique "Informations d'identification non valides", ce qui signifie que le mot de passe que vous avez envoyé au serveur LDAP n'était pas correct.

1
Bora

Active Directory: vérifiez vos conteneurs de domaine. 

La même erreur s'est produite lors de la migration d'eDirectory vers Active Directory. Le nom d'utilisateur et le mot de passe semblaient être corrects, mais pour une raison quelconque, le message d'erreur "52e" indique toujours que le mot de passe est incorrect. 

J'ai dû ajouter les contrôleurs de domaine (conteneurs de domaine) au principal pour que cela fonctionne:

Cela ne fonctionnait pas: 

env.put(Context.SECURITY_PRINCIPAL, "CN="+username+",OU=Users,OU=Org,OU=ETC");

Ajout des CD: (Cela a fonctionné pour moi) 

 env.put(Context.SECURITY_PRINCIPAL, "CN="+username+",OU=Users,OU=Org,OU=ETC,DC=yourorg,DC=com");

Cela m'a résolu le problème pour Active Directory. 

Quelque chose qui m'a vraiment aidé à résoudre ce problème était d'essayer de se lier à l'aide de la commande linux ldapbind/ldapsearch https://docs.Oracle.com/cd/B10501_01/network.920/a96579/comtools.htm .

si vous le faites fonctionner à partir du système d'exploitation à l'aide des commandes ldapbind/ldapsearch, vous saurez quels paramètres exacts vous devez utiliser dans votre code. 

1
Israelm

DirContext ldapContext;

    Hashtable<String, String> ldapEnv = new Hashtable<String, String>(11);
      ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.Sun.jndi.ldap.LdapCtxFactory");
      //ldapEnv.put(Context.PROVIDER_URL,  "ldap://societe.fr:389");
      ldapEnv.put(Context.PROVIDER_URL,  "ldap://10.112.115.14:389");
      ldapEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
      ldapEnv.put(Context.SECURITY_PRINCIPAL, "[email protected]");
      ldapEnv.put(Context.SECURITY_CREDENTIALS, "ca$hc0w");
      //ldapEnv.put(Context.SECURITY_PROTOCOL, "ssl");
      //ldapEnv.put(Context.SECURITY_PROTOCOL, "simple");
      ldapContext = new InitialDirContext(ldapEnv);

      System.out.println(ldapContext);

      // Create the search controls         
      SearchControls searchCtls = new SearchControls();

      //Specify the attributes to return
      String returnedAtts[]={"sn","givenName", "samAccountName", "mail"};
      searchCtls.setReturningAttributes(returnedAtts);

      //Specify the search scope
      searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);

      //specify the LDAP search filter
      String searchFilter = "(&(objectClass=user)(mail=*))";

      //Specify the Base for the search
      String searchBase = "DC=VIEWCONNECTION, DC=COM";
      //initialize counter to total the results
      int totalResults = 0;

   // Search for objects using the filter
      NamingEnumeration<SearchResult> answer = ldapContext.search(searchBase, searchFilter, searchCtls);

    //Loop through the search results
      while (answer.hasMoreElements())
      {
        SearchResult sr = (SearchResult)answer.next();

        totalResults++;

        System.out.println(">>>" + sr.getName());
        Attributes attrs = sr.getAttributes();
        System.out.println(">>>>>>" + attrs.get("samAccountName"));
      }

      System.out.println("Total results: " + totalResults);
      ldapContext.close();
0
keniee van