Enthält System.DirectoryServices.DirectoryEntry einen Konstruktor, der tatsächlich "domain \ username" mit Ldap verwendet?

8

Microsoft hat einen KB-Artikel für allgemeine Zwecke ( Q316748 ), in dem beschrieben wird, wie mit dem Objekt DirectoryEntry gegen Active Directory authentifiziert wird . In ihrem Beispiel erzeugen sie einen Benutzernamenwert, indem sie den Domänennamen und den Benutzernamen in das Standard-NetBIOS-Format ("Domäne \ Benutzername") verketten und diesen als Parameter an den Verzeichniseintragskonstruktor übergeben:

%Vor%

Vor kurzem ist uns aufgefallen, dass der Domain-Teil des Benutzernamens komplett ignoriert wurde und in mehreren Umgebungen habe ich dieses Verhalten bestätigt. Der Benutzername und das Kennwort werden tatsächlich verwendet, da die Authentifizierung fehlschlägt, wenn sie ungültig ist. Es kann jedoch ein beliebiger Wert für den Domänennamen und die Authentifizierungsdurchläufe angegeben werden. Auf einen Blick würde ich theoretisieren, dass dieses Format für WinNT-basierten Verzeichniszugriff funktioniert, aber der Domain-Teil für LDAP ignoriert wird.

Eine Überprüfung von google zeigt viele LDAP-Beispiele, die einen Wert für "Domäne \ Benutzername" an das DirectoryEntry -Objekt übergeben, sodass ich in meiner Konfiguration etwas durcheinander gebracht habe oder dass viele Leute vom KB-Artikel verwirrt wurden. Kann irgendjemand bestätigen, dass dies das erwartete Verhalten ist oder eine Möglichkeit empfehlen, "Domain \ Benutzername" -Werte zu akzeptieren und sich mit Active Directory bei ihnen zu authentifizieren?

Danke,

    
John Lewin 15.10.2009, 22:58
quelle

2 Antworten

18

Die kurze Antwort: Wenn der Parameter path des Konstruktors DirectoryEntry einen ungültigen Domänennamen enthält, wird das Objekt DirectoryEntry (nach einer nicht erfolgreichen Suche nach der ungültigen Domäne im forrest) Versuchen Sie einen Fehler zu beheben, indem Sie den Domain-Teil des Parameters username löschen und versuchen, die Verbindung mit dem einfachen Benutzernamen (sAMAccountName) herzustellen.

Die lange Antwort: Wenn der im Parameter username angegebene Domänenname ungültig ist, der Benutzer aber in der im Parameter path angegebenen Domäne vorhanden ist, wird der Benutzer authentifiziert (durch die Verwendung der Fallback). Wenn der Benutzer jedoch in einer anderen Domäne in der Domäne existiert als der in der Parameter path angegebene, ist die Authentifizierung nur erfolgreich, wenn der Domäne-Teil des Parameters username enthalten und korrekt ist.

Es gibt vier verschiedene Möglichkeiten, den username-Parameter beim Umgang mit DirectoryEntry-Objekten anzugeben:

  • Definierter Name (CN = Benutzername, CN = Benutzer, DC = Domäne, DC = lokal)
  • NT-Kontoname (DOMÄNE \ Benutzername)
  • Einfacher Kontoname / sAMAccountname (Benutzername)
  • Name des Benutzerprinzipalnamen (idR [email protected])

Lassen Sie mich das anhand eines Beispiels veranschaulichen:

%Vor%

Im obigen Beispiel ist domain.one die forrest-Stammdomäne und domain.two ist im selben forrest wie domain.one (aber natürlich ein anderer Baum).

Um Ihre Frage zu beantworten: Die Authentifizierung schlägt immer fehl, wenn der Benutzer in der Domain, mit der wir uns verbinden und kein oder ein ungültiger Domainname im Parameter username angegeben ist.

    
Per Noalt 16.10.2009, 09:30
quelle
0

Ich habe zwei Anwendungen, die DirectoryEntry(_path, domainAndUsername, pwd); -Konstruktor verwenden und ich habe kein Authentifizierungsproblem. Jede Anwendung wird auf einem anderen Kunden installiert, beide mit sehr (sehr) großen Domänenstrukturen.

    
Rubens Farias 15.10.2009 23:20
quelle