Oortael Geschrieben 17. Januar 2005 Geschrieben 17. Januar 2005 Hi, ich würde gerne mit JNDI auf ein LDAP verzeichnis zugreifen, und daraus die Benutzerpasswörter des Active Directory mit denen vergleichen, die z.B. ein Benutzer über eine Form oder ein GUI eingibt. Soweit ich das verstanden habe müsste es funktionieren, wenn ich mit einem berechtigten Acount mich mit dem LDAP server Authentifiziere, und dann einfach nur mit den Richtigen Attributen des im LDAP gespeicherten Benutzers das Passwort dem LDAP Server zum Vergleich vorschiebe. Dann bekomme ich entweder eine Exception weil es das falsche Passwort war oder nichts falls es richtig war. Soweit zur Theorie. Noch klappt aber leider die Authentifizierung mit dem LDAP noch nicht. Bekomme immer diese Exception, sobald ich mich mit der Authentifizierungsmethode "simple" versuche: javax.naming.AuthenticationException: [LDAP: error code 49 - Authenticated bind failed. Anonymous bind established.] at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:2750) at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2696) at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2497) at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2414) at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:258) at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:91) at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:674) at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:255) at javax.naming.InitialContext.init(InitialContext.java:231) at javax.naming.InitialContext.<init>(InitialContext.java:207) at javax.naming.directory.InitialDirContext.<init>(InitialDirContext.java:92) at corp.bmw.emeadecentral.nlm.ldapgrab.app.LDAPGrab.connect(LDAPGrab.java:77) at corp.bmw.emeadecentral.nlm.ldapgrab.test.Test.main(Test.java:19) Exception in thread "main" Was hat die zu Bedeuten? So sieht der Code zur Zeit aus: package corp.poersel.ldap; import java.net.URL; import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingEnumeration; import javax.naming.NamingException; import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; import javax.naming.directory.SearchControls; import javax.naming.directory.SearchResult; public class LDAPGrab { /* * Wird zur Verbindung benötigt */ //k.A. final String FILTER_USERS="(uid=*)"; //Hält benötigte Prameter Hashtable properties = new Hashtable(); //LDAP Server private String server = "ldap.poersel"; //LDAP Port auf dem Server private int port = 389; //LDAP URL private String serverURL = "ldap://" + server + ":" + port; //benutzername private String usr = "CN=Stefan Poersel,ou=people,o=family,dc=poersel,dc=com"; //passwort private String pwd = "Engine"; // InitialDirContext ctx = null; /* * */ private String searchString = "stefan"; public LDAPGrab() { super(); } public void connect() throws NamingException { //? properties.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); //url des LDAP Servers properties.put(Context.PROVIDER_URL, serverURL); /* * * Identifizierung am LDAP server * * "none" --> keine Authentifizierung * "simple" --> mit Authentifizierung * "strong" --> ?????? * */ properties.put(Context.SECURITY_AUTHENTICATION, "simple"); properties.put(Context.SECURITY_PRINCIPAL, usr); properties.put(Context.SECURITY_CREDENTIALS, pwd); // ctx = new InitialDirContext(properties); NamingEnumeration list = (NamingEnumeration) ctx.lookup("ou=family"); System.out.println(list); } public void disconnect() throws NamingException { ctx.close(); } } Zitieren
trc Geschrieben 20. Januar 2005 Geschrieben 20. Januar 2005 //benutzername private String usr = "CN=Stefan Poersel,ou=people,o=family,dc=poersel,dc=com"; versuchs beim benutzernamen mal nur mit "Stefan Poersel". sonnst kann ich keinen fehler finden. Zitieren
tuxfriend Geschrieben 21. Januar 2005 Geschrieben 21. Januar 2005 Die Anmeldung, durch die der LDAP Server feststellt, ob du überhaupt berechtigt bist, Operationen auf ihm durchzuführen schlägt bei dir offensichtlich fehl. Hierzu fallen mir spontan 3 Möglichkeiten ein: 1. Der DN (CN=Stefan Poersel, ou =...) existiert auf dem Server nicht 2. Das zu diesem DN übergebene Passwort ist falsch 3. Es gibt durchaus LDAP Server, die eine unverschlüsselte Übergabe des Passwortes nicht akzeptieren. Auch das könnte zu einem entsprechenden Fehler führen. Gruß Nils Zitieren
Oortael Geschrieben 22. Januar 2005 Autor Geschrieben 22. Januar 2005 Die Anmeldung, durch die der LDAP Server feststellt, ob du überhaupt berechtigt bist, Operationen auf ihm durchzuführen schlägt bei dir offensichtlich fehl. Hierzu fallen mir spontan 3 Möglichkeiten ein: 1. Der DN (CN=Stefan Poersel, ou =...) existiert auf dem Server nicht 2. Das zu diesem DN übergebene Passwort ist falsch 3. Es gibt durchaus LDAP Server, die eine unverschlüsselte Übergabe des Passwortes nicht akzeptieren. Auch das könnte zu einem entsprechenden Fehler führen. Gruß Nils 1. Der DN existiert, da ich ihn mir, wenn ich mich anonym anmelde, ausgeben lassen kann. 2. Kann ich für den DN Passwörter speziell setzen, oder setzt das AD das Windows Passwort dafür? 3. Wie kann ich herausfinden, welches Verfahren der LDAP Server verwendet? Gruß Codefiesler Zitieren
tuxfriend Geschrieben 22. Januar 2005 Geschrieben 22. Januar 2005 Hallo, Sorry, mit dem MS ActiveDirectory kenne ich mich nicht aus, habe bisher nur mit openLDAP und ein wenig mit dem Novell E-Directory gearbeitet. Was das setzen des Passwortes betrifft, dafür gibt es im LDAP Schema das Attribute userPassword. Versuch doch einfach mal, dich mit einem existierenden und funktionierenden LDAP Browser (findest du z.B. hier: www-unix.mcs.anl.gov/~gawor/ldap/) auf den Server zuzugreifen. Wenn das funktioniert weißt du zumindestens, dass Benutzername und Passwort OK sind. Was die akzeptierte Üergabe von Passwörtern betrifft, kann ich dir nicht weiterhelfen. LDAP ist halt ein Protokoll, die Implementationen sind schon sehr unterschiedliche. Gruß Nils Zitieren
Oortael Geschrieben 23. Januar 2005 Autor Geschrieben 23. Januar 2005 Danke. Werds damit mal probieren. Zitieren
qbe Geschrieben 24. Januar 2005 Geschrieben 24. Januar 2005 bist Du bei deinem Problem weitergekommen? ich arbeite gerade auch mit JNDI und dem AD von MS. soweit ich weiss kannst man die Passwörter nur über SSL abfragen bzw. setzen. Ich kann mich ans AD anmelden und einen User anlegen, aber nicht sein Passwort setzen. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.