LDAP-Benutzerauthentifizierung erklärt | Connect2id

Die LDAP-Benutzerauthentifizierung ist der Prozess der Validierung einer Kombination aus Benutzername und Passwort mit einem Verzeichnisserver wie MS Active Directory, OpenLDAP oder OpenDJ. LDAP-Verzeichnisse sind eine Standardtechnologie zur Speicherung von Benutzer-, Gruppen- und Berechtigungsinformationen und zur Bereitstellung dieser Informationen für Anwendungen im Unternehmen.

Die Authentifizierung von Benutzern mit einem LDAP-Verzeichnis ist ein zweistufiger Prozess. In diesem Artikel wird die Funktionsweise erläutert und anschließend erklärt, wie man ihn inLdapAuth konfiguriert.

Schritt 1 – Auflösen des Benutzernamens in ein Verzeichniseintragsattribut

Benutzereinträge in einem Verzeichnis werden durch einen Distinguished Name (DN) identifiziert, der eine pfadähnliche Struktur darstellt, die bei der Verzeichniswurzel (dem ganz rechten Segment) beginnt:

uid=alice,ou=people,dc=wonderland,dc=net

Um einen Benutzer mit einem LDAP-Verzeichnis zu authentifizieren, müssen Sie zunächst seinen DN sowie sein Passwort erhalten.

Bei einem Anmeldeformular geben die Benutzer in der Regel eine einfache Kennung wie ihren Benutzernamen oder ihre E-Mail-Adresse ein. Man erwartet nicht, dass sie sich den DN ihres Verzeichniseintrags merken. Das wäre unpraktisch.

Um dieses Problem zu lösen, kommt eine DN-Auflösung zum Einsatz. Sie nimmt den Namen oder die E-Mail des Benutzers und durchsucht dann die Namens- oder E-Mail-Attribute aller Benutzereinträge, um den passenden DN zu finden. Verzeichnisse verwenden eine hocheffiziente Indizierung und Zwischenspeicherung, so dass diese Suchvorgänge in der Regel sehr schnell sind.

Die Verzeichnisattribute, nach denen gesucht werden soll, werden in den searchFilterconfigurationParametern definiert.Die Standardkonfiguration von LdapAuth durchsucht die Attribute UID und email. Der Platzhalter%u wird durch die im Anmeldeformular eingegebene Benutzerkennung ersetzt:

ldapAuth.dnResolution.searchFilter = (|(uid=%u)(mail=%u))

Wenn Sie nur nach der UID suchen möchten, würde der Suchfilter wie folgt aussehen:

ldapAuth.dnResolution.searchFilter = (uid=%u)

Wenn Sie nach UID, E-Mail und Mitarbeiternummer suchen wollen, erweitern Sie den Filter zu

ldapAuth.dnResolution.searchFilter = (|(uid=%u)(mail=%u)(employeeNumber=%u))

Zwei wichtige Dinge sind bei der Konfiguration der DN-Auflösung und der Erstellung neuer Benutzereinträge im Verzeichnis zu beachten:

  • Die Attribute – Benutzername, E-Mail usw. -, mit denen sich Benutzer anmelden, müssen eindeutig sein. Wenn zwei Einträge das gleiche identifizierende Attribut haben, z.B. E-Mail, wird die Authentifizierung sofort verweigert.

  • Stellen Sie sicher, dass jeder Benutzer, der sich anmelden soll, ein definiertes Attribut für das identifizierende Attribut hat. Wenn sich Benutzer beispielsweise mit ihrer E-Mail-Adresse anmelden, stellen Sie sicher, dass alle Konten über ein definiertes E-Mail-Attribut verfügen, da sonst die Authentifizierung fehlschlägt.

Die LdapAuth-Web-API zeigt in der Antwort auf die Authentifizierung nicht die Ursache des Anmeldefehlers an – ob es sich um einen falschen Benutzernamen, ein falsches Kennwort oder beides handelt. Zur Fehlerbehebung in Situationen, in denen sich ein Benutzer trotz Eingabe eines korrekten Benutzernamens und Kennworts nicht anmelden kann, überprüfen Sie die Dienstprotokolle.

Wenn eine Anmeldung aufgrund eines falschen Benutzernamens abgelehnt wurde, erscheint im Protokoll eine Zeile wie diese:

2012-10-01 10:52:51,460 INFO – user.auth: username=tom authenticated=false message=Invalid username

Wenn der Benutzername korrekt aufgelöst wurde, aber das Kennwort falsch war:

2012-10-01 10:55:05,662 INFO – user.auth: username=alice DN=uid=alice,ou=people,dc=wonderland,dc=net authenticated=false message=Invalid password

Wenn wir den Verzeichniseintrag des Benutzers korrekt aufgelöst haben, können wir zum nächsten Schritt übergehen – der Überprüfung des Kennworts.

Schritt 2 – Überprüfen des Benutzerkennworts

Kennwörter werden mit einem LDAP-Befehl namens bind überprüft. Es wird eine Verbindung zum Verzeichnisserver geöffnet, dann wird eine Anfrage gesendet, um die Verbindung als einen bestimmten Benutzer zu authentifizieren, indem sein Eintrags-DN und sein Passwort übergeben werden:

DN: uid=alice,ou=people,dc=wonderland,dc=netpassword: secret

Wenn die Anmeldeinformationen korrekt sind, gibt der Verzeichnisserver einen Erfolg zurück. Andernfalls wird ein LDAP-Fehler Invalid credentials (Code 49) zurückgegeben.

Was hier zu beachten ist:

  • Das Kennwort wird anhand eines Attributs im Benutzereintrag überprüft, das für diesen Zweck vorgesehen ist. Wenn Sie ein Standardverzeichnisschema verwenden, heißt dieses Attribut userPassword. In MS Active Directory lautet der Name dieses Attributs unicodePwd. Stellen Sie sicher, dass jeder Benutzer, der sich anmelden soll, ein definiertes Passwortattribut hat. Andernfalls schlägt die Authentifizierung fehl.

  • Die Kennwortwerte sind häufig gehasht und können zusätzlich geschützt werden, z. B. indem sie schreibgeschützt werden. Daher wird ein einfaches LDAP-Lesen und Vergleichen hier in der Regel nicht funktionieren. Der bind-Befehl ist immer die bevorzugte Methode.

  • Bei den Passwörtern wird in der Regel zwischen Groß- und Kleinschreibung unterschieden.

Auch hier gilt: Log-Dateien sind Ihr Freund. Sie zeichnen Details zu jedem Anmeldeversuch auf und können zur schnellen Fehlerbehebung verwendet werden, wenn die Authentifizierung nicht wie erwartet funktioniert. Wenn Sie weitere Hilfe bei der Konfiguration von LdapAuth benötigen, setzen Sie sich mit uns in Verbindung.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.