web-dev-qa-db-de.com

So finden Sie die richtigen LDAP-Parameter

Ich arbeite gerade an einem kleinen Projekt mit Active Directory und ein paar LDAP-Dateien ... Ich versuche, eine Verbindung zum LDAP-Server herzustellen, und es gibt immer den gleichen Fehler: 

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

Soweit ich weiß, bedeutet dies, dass die Anmeldeinformationen falsch sind, aber ich bin mir 100% sicher, dass sie Recht haben! Könnte es sein, dass ich einen Parameter vergessen habe?

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);

Ich denke, mein Code sieht richtig aus oder habe ich etwas vermisst? Was könnte das Problem sein und wie kann ich das herausfinden?

10
muffin

Der im Fehler angegebene Wert "data 52e" impliziert, dass die Bindung fehlgeschlagen ist, weil: Gibt zurück, wenn Benutzername gültig ist, Kennwort/Berechtigungsnachweis jedoch ungültig ist.

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

17
jwilleke

Dieses Problem kann auch auftreten, wenn die vollständige Domäne nicht im Benutzernamen enthalten ist.

Legen Sie den Sicherheitsprinzipal als [email protected] fest.

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

Ich hatte die Probleme beim Versuch, eine Verbindung von wildfly zu einem Microsoft Active Directory-Server zu sichern. Das Hauptproblem besteht nicht darin, zu wissen, welche Verbindungszeichenfolge sein sollte.
Wenn Sie den "Active Directory Explorer" von Sysinternals installieren, nehmen Sie das Kit von Microsoft. Suchen Sie nach dem Objekt, an das Sie binden möchten. Die Einstellung 'Path:' wird angezeigt. Dies ist die Zeichenfolge von Werten, die Sie im Argument in den Context.SECURITY_PRINCIPAL-Wert angeben müssen. In meinem Fall hatte die Pfadzeichenfolge das Format 

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

Das erforderliche Argument wäre 

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

Bitte beachten Sie, dass Leerzeichen sehr wichtig sind

2
Dave

Der LDAP-Fehlercode 49 zeigt "Ungültige Anmeldeinformationen" an. Dies bedeutet, dass das an den LDAP-Server gesendete Kennwort nicht korrekt war.

1
Bora

Active Directory: Überprüfen Sie Ihre Domänencontainer. 

Ich hatte den gleichen Fehler bei einer Migration von eDirectory zu Active Directory, der Benutzername und das Kennwort schienen richtig zu sein, aber aus irgendeinem Grund erhielt ich immer noch den Fehler "52e", der angibt, dass das Kennwort nicht korrekt ist. 

Ich musste die DCs (Domain Container) zum Principal hinzufügen, damit es funktioniert:

Das hat nicht funktioniert: 

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

Hinzufügen der DCs: (Das hat für mich funktioniert) 

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

Dies löste das Problem für Active Directory. 

Etwas, das mir beim Lösen dieses Problems wirklich geholfen hat, war der Versuch, mithilfe des Linux-Befehls ldapbind/ldapsearch https://docs.Oracle.com/cd/B10501_01/network.920/a96579/comtools.htm eine Verbindung herzustellen.

wenn Sie das Betriebssystem mit den Befehlen ldapbind/ldapsearch zum Laufen bringen, wissen Sie genau, welche Parameter Sie in Ihrem Code verwenden sollten. 

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