Hier ist der Hintergrund. Ich hatte ein .NET MVC v1.0-Projekt, das ich versuchte, es zu sichern, indem ich Windows-Authentifizierungsmodus verwendete. Also stelle ich die web.config auf:
%Vor%Und dann ging ich in meinen Controller und tat folgendes:
%Vor%In AD haben wir eine Gruppe namens "IT" und ich bin viele andere sind von dieser Gruppe getrennt. Sobald ich dies an Ort und Stelle hatte, begann ich eine Debugging-Sitzung und versuchte, eine der Aktionen in diesem Controller zu gehen und ich wurde mit einem 401 getroffen. Ich suche hoch und niedrig auf der Suche nach irgendwo, dass ich den Hündchen geschraubt hatte und nichts finden konnte falsch. Nach einer Weile des Kämpfens entschied ich mich zu versuchen, die "Autorisieren" zu einem bestimmten Benutzer zu ändern und zu sehen, ob das funktionierte. Also habe ich es wie folgt geändert:
%Vor%Und niedrig und siehe, das hat funktioniert. Also ging ich und fügte eine andere Gruppe hinzu, der ich angehörte, und nahm die Autorisierung der Benutzer heraus, und das funktionierte. Ich fing an, die Unterschiede zwischen den beiden AD-Gruppen zu untersuchen und das einzige, was anders war, war auf der zweiten Gruppe, die ich versuchte, den "Gruppennamen (vor Windows 2000):" waren die gleichen. Die "IT" -Gruppen "Gruppenname (vor Windows 2000):" war "IT Associates". Also habe ich versucht, die authorize-Anweisung zu ändern:
%Vor%Und es hat angefangen zu arbeiten. Ich war mir sicher, dass dies ein MVC-Problem war, also um sicherzustellen, dass ich es in einem regulären Web Forms-Projekt ausprobiert habe und das gleiche Problem hatte.
Der eigentliche Kicker ist, dass wenn Sie das UserPrincipal verwenden, das Teil von System.DirectoryServices.AccountManagement ist, es die Gruppe "IT" zurückgibt, wenn Sie die .GetGroups () -Methode verwenden.
Warum passiert das?
Sie müssen die verschiedenen Namen voneinander trennen, die ein Eintrag in AD haben kann:
Der Name ist normalerweise das CN-Attribut - der allgemeine Name. Dies ist der Teil "CN = xxx" in Ihrer LDAP-Zeichenfolge. Hier ist IT
- und das ist, was System.DirectoryServices.AccountManagement zurückgibt - es ist der am häufigsten verwendete Name des "Active Directory"
Der Name "IT Associates" ist der Pre-Windows 2000 oder sAMAccountName
- der Name, den Windows NT verwendet hat, bevor AD verwendet wurde - ein lokaler Benutzer- und / oder Gruppenname (SAM = Security Account Management oder so ähnlich). Der SAM-Kontoname muss für jede Domäne eindeutig sein - selbst in einer großen AD-Gesamtstruktur in diesen Tagen.
Leider basieren viele Windows-API-Aufrufe immer noch auf diesem Namen - da sie mit früheren Windows-Versionen abwärtskompatibel sind (und müssen). Das ASP.NET-Mitgliedschaftssystem verwendet diese Aufrufe und verwendet daher Ihren domain/tnederveld
-Benutzernamen und IT Associates
-Gruppe - das sind die SAM-Kontonamen Ihrer Objekte
Nicht sicher, ob Sie viel dagegen tun können - seien Sie sich bewusst, dass in einer AD-Umgebung jeder Ihrer Benutzer oder Gruppen eine Fülle von "Namen" hat - seien Sie sich stets darüber im Klaren, über welche Sie sprechen!
Eine detaillierte Liste aller AD-Attribute finden Sie auf Richard Muellers exzellenter Website mit Referenzmaterial zum Active Directory .
Tags und Links asp.net-mvc asp.net webforms active-directory windows-authentication