2009-08-12 9 views
5

Używam usługi Active Directory w niestandardowej klasie MembershipProvider do uwierzytelniania użytkowników w aplikacji intranetowej ASP.NET 2.0 i powiązywania ich sid z profilem dla Aplikacja.ASP.NET - Uzyskaj identyfikator główny/względny (RID) dla obiektu DirectoryEntry/SID

Gdy ActiveDirectoryMembershipProvider jest używana, ProviderUserKey obiektu dla MembershipUser jest następujący

SecurityIdentifier sid = (SecurityIdentifier)Membership.GetUser().ProviderUserKey; 
string sidValue = sid.ToString(); 

/* sidValue = "S-1-5-21-XXXX-XXXX-XXXX-YY" */ 

jak rozumiem, YY jest głównym w przestrzeni nazw (określanego również jako grupa/domeny).

przypadku korzystania z niestandardowych MembershipProvider, mogę SID pomocą właściwości objectSid od obiektu DirectoryEntry

DirectoryEntry entry = new DirectoryEntry(path, username, password); 
SecurityIdentifier sid = new SecurityIdentifier((byte[])entry.Properties["objectSid"].Value, 0); 
string sidValue = sid.ToString(); 

/* sidValue = "S-1-5-21-XXXX-XXXX-XXXX" */ 

sidValue w tym przypadku jest identyczne, z wyjątkiem, że nie zawiera główną YY.

Moje pytanie jest dwojaki

  1. jest głównym niezbędna do jednoznacznego zidentyfikowania konkretnej osoby?
  2. Czy można uzyskać mocodawcę z obiektu DirectoryEntry (lub z innych klas dostępnych w System.DirectoryServices)?

EDIT:

Uczyniwszy niektóre dalszego czytania ({1}{2}), teraz wiem, że sid może się zmienić, jeśli użytkownik zostaje przeniesiony z jednej grupy/domeny do innego. W związku z tym, czy użycie GUID zdefiniowanego w DirectoryEntryProperties["objectGUID"] będzie lepszym wyborem do jednoznacznej identyfikacji użytkownika?

Odpowiedz

3

Obiekt objectGUID jest najlepszym wyborem do identyfikacji użytkownika użytkownika konto. Podkreślam to, ponieważ identyfikator objectGUID jest unikalny i poprawiony dla instancji konta. Jeśli usuniesz i ponownie utworzysz konto o tej samej nazwie wyróżniającej, otrzymasz inny identyfikator obiektuGUID. Obiekt objectGUID nie identyfikuje użytkownika, lecz identyfikuje konto.

Tak więc, jeśli chcesz zidentyfikować konto, użyj obiektu objectGUID.

Czasami konta mogą być usuwane i ponownie tworzone przez administratorów w celu rozwiązania problemów. Jeśli musisz zidentyfikować użytkownika nawet po tym, jak to się stało, musisz wybrać coś innego na obiekcie konta. To prawdopodobnie będzie zależało od twoich zasad definiowania konta. Być może masz sAMAccountNames, które nie są oparte na nazwie użytkownika? Może administratorzy zapełniają employeeid lub employeeNumber? Może wymuszają unikalność dla displayNames?

Oto link do AD attribute info. Oto link do DirectoryEntry Properties.

+0

Czy identyfikator obiektu GUID jest identyfikatorem GUID konta lub identyfikatorem GUID dla typu obiektu reprezentowanego przez pozycję katalogu? Masz również link do dowolnej dokumentacji, która zawiera szczegółowe informacje na temat każdej właściwości wpisu do katalogu? –

+0

To identyfikator GUID dla indywidualnego konta. Możesz go zobaczyć w usłudze Active Directory, jeśli używasz przystawki MMC Przystawka ADSI (http://technet.microsoft.com/en-us/library/cc773354(WS.10).aspx). – serialhobbyist

+0

Dodałem linki do głównego postu, ponieważ poprzedni wydawał się być nieco zawikłany. Nie byłem pewien, czy chcesz właściwości obiektu DirectoryEntry lub obiektu AD. W tym drugim przypadku ludzie z AD mówią o nich jako o atrybutach. Tak więc wystąpienie klasy AD, takie jak użytkownik, ma atrybuty takie jak displayName. Wystąpienie DirectoryEntry ma właściwość Properties, która zawiera kolekcję atrybutów i ich wartości. To powinno być nazywane Atrybuty, IMO. – serialhobbyist

Powiązane problemy