Welches Feld soll bei der Authentifizierung mit Active Directory verwendet werden?

12

Active Directory-Benutzerobjekte enthalten eine Reihe von Feldern, die als Bezeichner betrachtet werden können. Im Folgenden werden einige davon mit ihrer Bezeichnung in ADUC und ihrem Attributnamen aufgeführt:

  • Vollständiger Name - cn
  • ? - Name
  • Anmeldung von Benutzer sAMAccountName - sAMAccountName
  • UPN-Benutzeranmeldung: userPrincipalName
  • ? - Distinguished Name

Ich versuche, unsere Entwickler dazu zu bringen, beim Schreiben von benutzerdefiniertem Code, der sich gegen AD authentifiziert, nur einen dieser Codes zu verwenden. Ich bin mir nicht sicher, welcher "der richtige" ist oder ob verschiedene der richtige in verschiedenen sind Umstände. Ich bin mir nicht mal sicher, ob eines der oben genannten Felder verwendet werden sollte!

Hat sich jemand anderes für eine einheitliche Verwendung entschieden, und was hat Sie bei dieser Entscheidung beeinflusst? Irgendeine Dokumentation, die das Problem klärt?

dunxd
quelle
Ich bin auf einige Anwendungen gestoßen (sowohl intern entwickelte als auch von anderen entwickelte), die sich über LDAP mithilfe des Felds cn authentifizieren. Dieses Feld wird jetzt automatisch im AD Admin Center aktualisiert (es trägt die Bezeichnung "Vollständiger Name"), wenn Sie die Felder "Vor-" oder "Nachname" ändern. Dies bedeutet, dass Sie nicht davon ausgehen können, dass das Feld "cn" als Benutzernamenfeld betrachtet werden kann. Haben diese Entwickler das falsche Feld verwendet oder hat Microsoft CN gebrochen?
Donnerstag,

Antworten:

18

Ein CN (Common Name) eignet sich nicht zum Anmelden, da ein CN allein einen Benutzer nicht eindeutig identifiziert. Ich könnte eine haben

CN=Ryan Ries,OU=Dallas,DC=Domain,DC=com

und ich könnte auch eine haben

CN=Ryan Ries,OU=New York,DC=Domain,DC=com

Die CN eines Benutzers ist auch eine RDN (Relative Distinguished Name). Sie haben dieselbe CN, aber unterschiedliche DNs. Möglicherweise stellen Sie fest, dass Sie auf Probleme stoßen, wenn Sie zwei Personen in Ihrer Organisation haben, die Ryan Ries heißen, und Sie müssen den SamAccountName für die zweite Person in etwa so festlegen rries2.

Ein DN (Distinguished Name) ist nicht gut zum Anmelden, denn wer möchte sich mit einem Benutzernamen wie anmelden CN=ryan,OU=Texas,DC=brazzers,DC=com? Während die Verwendung eines DN einen Benutzer eindeutig identifiziert, ist es ärgerlich, ihn eingeben zu müssen. Es ist die gleiche Art von Konzept zwischen relativen Pfaden und absoluten Pfaden in einem Dateisystem. Dies bedeutet auch, dass Sie genau wissen, wo sich das Objekt in der Verzeichnisstruktur befindet, ohne dass Sie danach suchen müssen. Was du oft nicht tust.

Dies wird als Ambiguous Name Resolution (ANR) bezeichnet und durchsucht das Verzeichnis nach einem Benutzer, wenn Sie nicht über seinen definierten Namen verfügen.

UPN (User Principal Name) ist ziemlich gut, da sie wie E-Mail-Adressen aussehen, mit der Unternehmens-E-Mail-Adresse des Benutzers identisch sein können, leicht zu merken sind und vorzugsweise angemeldet sind, da nach dem Namen gesucht wird Zuerst in der lokalen Domäne, bevor Sie in der Gesamtstruktur danach suchen.

Microsoft sagt: Der UPN soll die E-Mail- und Anmelde-Namespaces so konsolidieren, dass sich der Benutzer nur einen einzigen Namen merken muss. Der UPN ist der bevorzugte Anmeldename für Windows-Benutzer. Benutzer sollten ihre UPNs verwenden, um sich bei der Domäne anzumelden. Bei der Anmeldung wird ein UPN zuerst durch Durchsuchen der lokalen Domäne und dann des globalen Katalogs überprüft. Wenn der UPN nicht in der lokalen Domäne oder im GC gefunden wird, wird der UPN abgelehnt. Der UPN kann zugewiesen werden, ist jedoch nicht erforderlich , wenn das Benutzerkonto erstellt wird.

Denken Sie daran, dass am Ende beim Entwerfen Ihrer Anwendungen das Bit "Nicht erforderlich" verwendet wird.

SamAccountName ist auch gut, da SamAccountName für jeden in der Domäne (aber nicht für die Gesamtstruktur) eindeutig sein muss. Außerdem sind SamAccountNames kurz. Die meisten Benutzer melden sich mit SamAccountNames an, obwohl sie Sie in einer AD-Gesamtstruktur nicht eindeutig identifizieren. Aus diesem Grund müssen Sie einen Domänennamen angeben, der zu Ihrem SamAccountName passt, damit das System weiß, bei welcher Domäne Sie sich anmelden möchten .

Hier ist eine großartige Dokumentation zu diesem Thema, die Sie weiterlesen können:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms677605(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/windows/desktop/ms680857(v=vs.85).aspx

Ryan Ries
quelle
4

Wenn Sie den Benutzernamen als etwas bezeichnen, das jemand eingeben würde, um sich anzumelden, würde ich entweder empfehlen sAMAccountName, das in Kombination mit einem Domain-Namen eindeutig ist, oder das userPrincipalName, das innerhalb einer Gesamtstruktur eindeutig ist.

Was den Benutzernamen als eindeutige Kennung anbelangt, verwendet Windows die SID für alle Zugriffssteuerungseinträge und bietet einen vollständigen Satz von Methoden für die Übersetzung von Benutzernamen in SIDs. SIDs stimmen mit der Benutzermetapher für die Lebensdauer eines Kontos überein, da das Umbenennen und Verschieben innerhalb einer Domain keine Auswirkungen hat. Das Löschen und Neuerstellen führt jedoch zu einer neuen SID.

Zu diesem Zweck würde ich aufrufen LookupAccountName, der eine Zeichenfolge für den Benutzernamen verwendet und den sAMAccountName, den SIDund den Domänennamen der Domäne zurückgibt , in der der Benutzer gefunden wurde.

Der Benutzer kann sich dann mit jeder von Windows unterstützten Syntax anmelden, und es sind keine zusätzlichen Schulungen erforderlich.

Mitch
quelle
Akzeptiert LookupAccountName UPN oder sAMAccountName oder vollständig qualifiziertes DOMAIN \ sAMAccountName oder alle oben genannten? Aus der Dokumentation, auf die Sie verweisen, geht nichts hervor.
Dunxd
Die Dokumentation listet die Formate unterstützt: DOMAIN\Account, DOMAIN.COM\Account, Account, [email protected]. Es heißt zwar, dass vollqualifizierte Namen schneller sind, die anderen jedoch weiterhin verfügbar sind.
Mitch
0

Ich würde empfehlen, dem Benutzer zu erlauben, das Format des Namens zu wählen, den er verwenden möchte, und die Eingabe des Benutzers auf der Anwendungsseite zu bestimmen. Beispiel: Wenn der Benutzer Folgendes eingibt: Benutzername@Domäne.com - Betrachten Sie es als UPN und suchen Sie nach UPN in AD. Wenn der Benutzer Folgendes eingibt: Benutzername - Betrachten Sie es als samAccountName für eine vordefinierte Standarddomäne und natürlich, wenn der Benutzer Domäne \ Benutzername eingibt - Betrachten Sie es als samAccountName für die angegebene Domäne. Rufen Sie immer die SID des Benutzers ab und weisen Sie der SID alle Berechtigungen zu, da Personen heiraten und sich der Benutzername ändern kann.

Stan
quelle