2010-11-01 6 views
18

Die Verwendung von LDAP prüft einen Benutzernamen/ein Passwort so einfach wie den Versuch, als Benutzer zu binden und die Ergebnisse zu notieren, oder gibt es eine spezielle LDAP- "Prüfkennwort" -Funktion?LDAP - Wie überprüft man eine Kombination aus Benutzername und Passwort?

Ich versuche, ein wenig mehr "hinter den Kulissen" zu verstehen, während ich an einem unordentlichen LDAP-Repository-Setup-Problem arbeite.

(Hinweis: Dies ist für Situationen, in denen das Passwort als Hash nicht in einer benutzerdefinierten Eigenschaft gespeichert wird, diese Situation zu verwalten einfach ist)

Antwort

16

LDAP unterstützt einen Vergleich von userPassword. Sie senden das Passwort, der Server vergleicht und gibt true oder false zurück. Dies erfordert keine Anmeldung zur Authentifizierung von Benutzern.

+2

Wie würden Sie "vergleichen", wenn das Passwort im LDAP-Server verschlüsselt ist? –

+0

@Ashwinkumar Es gibt eine spezielle Funktion, um einen Passwortvergleich durchzuführen. Sie geben das zu testende Passwort ein, es ist ähnlich verschlüsselt, dann können Sie die beiden Werte vergleichen. Die Unterscheidung besteht zwischen dem Versuch, mit diesen Krediten zu binden, oder dem expliziten Aufruf der ldapCompare-Funktion. – geoffc

+2

hmm .. In einer aktuellen Frage, die ich http://stackoverflow.com/questions/16168293/how-to-do-password-authentication-for-a-user-using-ldap gepostet habe, wurde mir vorgeschlagen, bind für die zu verwenden Suchergebnis mit dem Passwort. Bindung mit den neuesten "dn" Werken. Die Bindung ist jedoch im Wesentlichen ein "Login". ein LDAP 'ldap_compare_s' ist fehlgeschlagen. Gibt es eine Möglichkeit, ein Passwort im Vergleich zum LDAP-Benutzerpasswort zu erhalten? –

2

Bindung als dass Benutzer ausreichend ist. Das Passwort wird bei der Bindung geprüft.

+3

Dies ist wirklich ein Kommentar, keine Antwort auf die Frage. Bitte benutzen Sie "Kommentar hinzufügen" um ein Feedback für den Autor zu hinterlassen. – Conner

+3

@Conner Sie irren sich.Eigentlich ist dies eine direkte Antwort auf die Frage "überprüft einen Benutzernamen/Passwort so einfach wie den Versuch, als dieser Benutzer zu binden". – EJP

+0

Ich hoffe, mein Kommentar hat dich nicht beleidigt. Dieser Kommentar wurde vom Beta-Review-System generiert. Ich persönlich finde, dass "Ja/Nein" oder kleinere Antworten auf spezifische Fragen besser als Kommentare geeignet sind. Ich meine nichts gegen Sie persönlich durch diese Meinung. Grüße. – Conner

4

Watch mit Bind für die Überprüfung Benutzername/Passwort, auf einigen Systemen wird es als Login zählen, und mit Login-Einschränkungen kann es fehlschlagen.

Verwenden Sie vergleichen ist eine bessere Option für die Überprüfung des Kennworts.

+1

Auch eine Anmeldung mit einem Null-Passwort zählt als anonyme Bindung, die immer erfolgreich ist. – geoffc

+2

Ich denke, der "richtige" Ansatz hängt davon ab, was Sie versuchen zu tun. Im allgemeinen Fall des Schreibens einer Anwendung, die die Authentifizierung an ein externes Verzeichnis delegiert, sind Login-Einschränkungen normalerweise * wünschenswert *, nein? –

+0

Ich weiß nicht, was der Unterschied zwischen "Passwort überprüfen" und "Login" sein könnte, oder besser, warum Sie jemals eines ohne das andere tun möchten. @geoffc Eine anonyme Bindung wird nur erfolgreich ausgeführt, wenn der Server so konfiguriert ist, dass sie zulässig ist. – EJP

5

Schauen Sie in die WhoAmI Extended Operation (RFC 4532).

WhoAmI erfüllt einen Zweck wirklich - validiert übergebene Anmeldeinformationen. Es sollte keine "Login-Einschränkungen" (die ich kenne) beeinflussen oder provozieren.

WhoAmI kann mit einer dedizierten Binärdatei (wie "ldapwhoami") ausgeführt werden oder mit Net :: LDAP :: Extension :: WhoAmI (Perl) oder einer anderen Sprache, die LDAP-Operationen unterstützt. Beachten Sie, dass das "Testen eines Passworts" mit einer "Such" -Funktion eine unklare Testmethode ist.

Zum Beispiel, wenn mein DN ist "uid = max, ou = Benutzer, dc = Firma, dc = com" und mein Passwort ist "@secret", könnte dies über die dedizierte Binärdatei auf einer Linux-Box (Anmerkung -ZZ wird für TLS Vertraulichkeit verwendet, die möglicherweise nicht unterstützt oder optional in Ihrer Umgebung ist):

ldapwhoami -x -w "@secret" -D uid=max,ou=users,dc=company,dc=com -ZZ -H ldap://address.of.your.ldapserver/ 

Wenn der Benutzer/pass Kombination korrekt ist, zurückgegeben die Antwort lautet:

dn: uid = max, ou = Benutzer, dc = Firma, dc = com

Wenn die Benutzer/Passkombination nicht korrekt ist, die Antwort zurückgegeben wird (in der Regel):

(49) Invalid Credentials

Dies könnte bedeuten, wie gesagt, das Passwort und/oder der Benutzername ist falsch, der Benutzer existiert nicht oder die ACLs des LDAP-Servers sind so beschädigt, dass eine Authentifizierung nicht möglich ist. In den meisten Fällen ist die Benutzer/Passwort-Kombination falsch eingegeben oder der Benutzer ist nicht vorhanden.

Abschließend ist die LDAPWhoAmI-Operation eine sehr einfache und einfache Methode zur Validierung von Anmeldeinformationen. Es funktioniert auch über andere Mechanismen (z. B. Kerberos Single Sign-On, Digest-MD5 usw.).

+1

Der Benutzername und das Passwort werden nicht als Teil der 'WhoAmI'Request gesendet. Alle 'WhoAmi'-Operationen sagen Ihnen, an wen Sie derzeit gebunden sind. Es ist daher Unsinn zu sagen, dass es "gesendete Bindungsanmeldeinformationen validiert". Es tut es nicht. Es gibt sie nur zurück, oder nur den Benutzernamen. Es ist der Schritt * bind *, der die Validierung durchführt: Sie allein reicht daher aus. In dem gegebenen Beispiel bindet "ldapwhoami" zuerst, was mit "Ungültige Anmeldeinformationen" fehlschlagen kann, und führt dann die "WhoAmI" -Operation aus. * Jede * LDAP-Operation hätte getan. Es musste nicht "WhoAmi" sein. – EJP

Verwandte Themen