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
- jest głównym niezbędna do jednoznacznego zidentyfikowania konkretnej osoby?
- 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 DirectoryEntry
Properties["objectGUID"]
będzie lepszym wyborem do jednoznacznej identyfikacji użytkownika?
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? –
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
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