Überprüfen von Benutzername / Kennwort java ldap jndi
Ich versuche, herauszufinden, eine einfache Möglichkeit zu überprüfen username
und password
mit Java (JNDI)
, nachdem ich bereits eine Verbindung zu dem LDAP mit einem bind (bind-DN und-Kennwort). Habe ich manuell Hinzugefügt, ein Benutzer in der LDAP -, und ich möchte mit java zu überprüfen, überprüfen Sie die Anmeldeinformationen des Benutzers (Benutzername und Passwort).
Ist dies eine einfache, klare Weg, dies zu tun?
Folgenden code habe ich bisher verwendet, um eine Verbindung zu LDAP mit ein zu binden (was funktioniert).
package org.jacob.testing;
import java.util.Hashtable;
import javax.naming.AuthenticationException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.*;
import javax.naming.ldap.LdapContext;
public class jacobLdap {
public static void main(String[] args) throws NamingException {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:10389");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "uid=admin,ou=system");
env.put(Context.SECURITY_CREDENTIALS, "secret");
DirContext ctx = new InitialDirContext(env);
NamingEnumeration answer = ctx.search("ldap://localhost:10389/ou=users,ou=system","(sn=Herring)",null);
//I've connected to LDAP, now how should I authenticate a user?
}
}
Sie konnte nur versuchen zu tun, ein binden als der neue Benutzer.
Ist dieser Fall abgeschlossen, oder haben Sie noch ein problem?
Ist dieser Fall abgeschlossen, oder haben Sie noch ein problem?
InformationsquelleAutor user3529353 | 2014-04-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die grundlegende Idee ist, dass Sie eine Bindung an LDAP-admin zu finden, der Nutzer, binden Sie erneut als Benutzer mit Passwort geliefert. Wenn beide erfolgreich sind, wird der Benutzer existiert und das Passwort.
Im Gegensatz zu anderen Antworten, die Sie Lesen können, sollten Sie nicht versuchen zu vergleichen, das Passwort selbst. In einem korrekt eingestellten LDAP-server das Passwort wird gehasht, so würden Sie zum reproduzieren des hashing-Algorithmus, der sich etc etc etc. Es ist sinnlos und fehleranfällig, und es können verschiedene algorithmen, die per Passwort. Stellen Sie den server tun, der Vergleich.
InformationsquelleAutor user207421
Konzeptionell haben Sie zwei Möglichkeiten:
In den meisten Fällen wird der 2. Ansatz ist vorzuziehen, da es einfacher und benötigt weniger code. Oft der Benutzer das Kennwort ist auch nicht verfügbar, wie ein LDAP-Attribut (z.B. wenn Sie den Zugriff auf den MS Active Directory über LDAP).
Als angedeutet durch @EJP es kann oder kann nicht notwendig sein, binden Sie sich als admin erstmal für den zweiten Ansatz. Wenn Sie kleine user-Basis, es gibt eine faire chance, Sie sind alle auf dem gleichen Zweig des LDAP-Baums (z.B.
uid=<user>,ou=users,dc=company,dc=com
). Dies bedeutet, dass Sie genau wissen, was DN zu verwenden, für die Bindung, da muss man einfach Spritzen Sie den jeweiligen Benutzernamen in eine konsistente Ort. Wenn Sie haben einen großen Kundenstamm, allerdings können Benutzer verteilt werden, die über mehrere Organisationseinheiten. Dann Sie zu binden, müssen Sie sich als admin zuerst und Suche für den Benutzer (also auf die Suche nach seinem DN).Habe ich das nicht gesagt?
Nicht wirklich, Nein. Es gibt andere, ernsthaftere Einwände neben weniger Einfachheit usw. Der erste Ansatz hat nichts, es zu empfehlen und sollte nicht noch aufgeführt.
"Es gibt andere, ernsthaftere Einwände neben weniger Einfachheit etc." - richtig ist, das ist sicherlich richtig, ich sollte erwähnt haben Sie, obwohl ich nicht empfohlen, der erste Ansatz.
InformationsquelleAutor Marcel Stör