Ich werde damit beginnen, zu beschreiben, wie meine Anwendung heute ohne LDAP funktioniert. Ich habe WPF-Anwendung, die WCF-Dienste verbraucht (Authentifizierung Windows oder Benutzername hängt von der Wahl des Benutzers ab). Dieser Dienst ermöglicht die Kommunikation mit der Datenbank.
Ich zeige dem Benutzer einen "Anmeldebildschirm" an, damit er seinen "Benutzernamen" und sein "Passwort" einstellen kann, dann verbindet sich die Anwendung mit dem Dienst und verwendet eine Funktion, die prüft, ob Benutzername und Passwort in der Datenbank vorhanden sind. (siehe img unten)
Jetzt muss ich auch LDAP integrieren, um Benutzerkonten gegen ihre bestehenden Systeme zu authentifizieren, anstatt ein weiteres Login-Konto zu erstellen.
Ich bin etwas ignorant gegenüber LDAP und verwirrt über viele Dinge. Bitte entschuldigen Sie die mögliche Verwendung falscher Terminologie.
Ich habe gegoogelt, aber ich habe immer noch keine Antworten auf viele Fragen.
1- Welche Beziehung besteht zwischen Benutzern, die in meiner Datenbanktabelle "Benutzer" existieren, und Profilen, die ich in LDAP erstellen soll?
2- Was muss ich tun, damit Benutzer aus LDAP auf meine Anwendung zugreifen und alle Funktionen meines Dienstes nutzen können?
3- Soll ich Service Typ "LDAP" wie andere Authentifizierungsarten, die ich heute in meiner Anwendung habe ("Windows" und "UserName") haben?
4- Wenn ich meine im obigen Bild beschriebene Anwendungsarchitektur aktualisieren möchte, wo sollte ich LDAP hinzufügen?
Zuerst werde ich Ihre Fragen eins nach dem anderen beantworten,
Der Benutzer in LDAP ist derselbe in der Datenbank, Sie können den LDAP-Benutzernamen und seine Domäne in Ihrer Benutzertabelle speichern, aber das Profil auf dem LDAP kann mit Ihrer Profiltabelle variieren, aber es kann von der LDAP-Adresse abgerufen werden.
Es genügt, den Benutzernamen und das Passwort über LDAP zu überprüfen, Sie müssen lediglich LDAP-Adressen in einer Tabelle speichern (Beispiel ExternalPath) und eine Beziehung zwischen den Tabellen "User" und "ExternalPath" herstellen. LDAP-Adresse enthält einige Spezifikationen.
Ja, Sie müssen einen separaten Mechanismus zum Identifizieren von LDAP-Benutzern haben, den ich näher erläutern werde.
Das ist nicht schwer, wenn alles atomar und richtig gestaltet ist, in weiteren Schritten werden Sie vielleicht sehen, dass es einfach ist.
Lassen Sie mich also über meine Erfahrungen mit LDAP und Authentifizieren von Benutzern in LDAP und DB und unserer Architektur sprechen.
Ich wurde ein WCF-Dienst namens Auth.svc
implementiert, dieser Dienst enthält eine Methode namens AuthenticateAndAuthorizeUser
, die für Benutzer transparent ist, die von LDAP oder irgendwo her kamen.
Ich hoffe, Sie erhalten den Schlüssel und die Architektur zur Authentifizierung des Benutzers über LDAP und DB in den folgenden Schritten:
1 - Zuerst habe ich eine Tabelle mit dem Namen Users
, die Benutzerinformationen enthält und ein weiteres Feld mit dem Namen ExternalPath
als Fremdschlüssel. Wenn es null ist, geben Sie UserName in DB mit Passwort an Es kommt von UserDirectory
.
2 - Im zweiten Schritt müssen Sie die LDAP-Adresse halten (in meinem Fall sind LDAP-Adressen in ExternalPath
table), alle LDAP-Adressen sind auf Port 389
gemeinsam.
3 - Authentifizierungsbenutzer implementieren, falls nicht gefunden (mit Benutzername und Passwort), dann überprüfen Sie, ob ExternalPath
die LDAP-Adresse überprüft.
4 - Das DB-Schema sollte so aussehen wie im Screenshot.
Wie Sie ExternalPath
Feld angeben können, ist der Benutzer von LDAP oder nicht.
5 - Im Präsentationslayer definiere ich LDAP-Server wie im Screenshot auch
6 - Auf der anderen Seite können Sie beim Hinzufügen neuer Benutzer im System LDAP für Benutzer definieren. In meinem Fall listet ich LDAP-Titel in einem DropDown auf, indem Sie Benutzerformular hinzufügen ( wenn admin auswählen) LDAP-Adresse muss dann kein Passwort bekommen und speichern Sie es in der DB ), wie ich bereits erwähnt LDAP-Benutzername nicht Passwort halten müssen.
7 - Aber letzte Sache ist die Authentifizierung des Benutzers in LDAP und DB.
Also ist die Authentifizierungsmethode etwas wie:
%Vor% Wenn userLogin
in der DB nicht existiert, durch Eingabe von Benutzername und Passwort, sollten wir es über die zugehörige LDAP-Adresse authentifizieren.
In else
Block finde den Benutzer aus der Users Tabelle und erhalte ExternalPath
, wenn dieses Feld nicht null ist, bedeutet User in LDAP.
8 - Die Methode LDAPAuthenticateUser
ist:
Wenn die Ausnahme in LDAPAuthenticateUser
ausgelöst wurde, bedeutet dies, dass der Benutzer im Benutzerverzeichnis nicht existiert.
Der Authentifizierungscode akzeptiert eine Domäne, einen Benutzernamen, ein Kennwort und einen Pfad zur Struktur in Active Directory.
Der obige Code verwendet den LDAP-Verzeichnisprovider, der von der Authentifizierungsmethode LDAPAuthenticateUser
aufgerufen wird, und übergibt die Anmeldeinformationen, die vom Benutzer gesammelt wurden. Anschließend wird ein DirectoryEntry-Objekt mit dem Pfad zur Verzeichnisstruktur, dem Benutzernamen und dem Kennwort erstellt. Das Objekt DirectoryEntry
versucht, die Bindung AdsObject
zu erzwingen, indem die Eigenschaft NativeObject
abgerufen wird. Wenn dies erfolgreich ist, wird das CN
-Attribut für den Benutzer durch Erstellen eines DirectorySearcher
-Objekts und durch Filtern auf SAMAccountName
erhalten. Nachdem der Benutzer authentifiziert wurde und die Ausnahme nicht aufgetreten ist, gibt die Methode true zurück, dh der Benutzer findet die angegebene LDAP-Adresse.
Wenn Sie weitere Informationen zum Lightweight Directory Access Protocol anzeigen und sich darüber authentifizieren möchten DIESER Link , können Sie nützlich sein, die über Spezifikation mehr erzählt.
Hoffnung wird dir helfen.
Tags und Links wcf wpf c# authentication ldap