Sto utilizzando Active Directory in una classe MembershipProvider personalizzata per autenticare gli utenti in un'applicazione Intranet ASP.NET 2.0 e associare loro sid con un profilo per l'applicazione.ASP.NET - Ottieni l'identificativo principale/relativo (RID) per una DirectoryEntry/SID
quando viene utilizzato il ActiveDirectoryMembershipProvider
, l'oggetto ProviderUserKey
per la MembershipUser
è la seguente
SecurityIdentifier sid = (SecurityIdentifier)Membership.GetUser().ProviderUserKey;
string sidValue = sid.ToString();
/* sidValue = "S-1-5-21-XXXX-XXXX-XXXX-YY" */
Da quanto ho capito, YY
è il principale all'interno del namespace (anche indicato come un gruppo/dominio).
Quando si utilizza il MembershipProvider personalizzato, posso ottenere il SID utilizzando la proprietà objectSid
di un oggetto 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" */
Il sidValue
in questo caso è identico, tranne che non contiene il principio YY
.
La mia domanda è duplice
- è il principale richiesto al fine di identificare in modo univoco un individuo?
- È possibile ottenere il principale dall'oggetto DirectoryEntry (o tramite qualsiasi altra classe disponibile in
System.DirectoryServices
)?
EDIT:
aver fatto qualche ulteriore lettura ({1}{2}), ora so che il SID può cambiare se l'utente viene spostato da un gruppo/dominio a un altro. Alla luce di ciò, utilizzare lo GUID
definito nello DirectoryEntry
Properties["objectGUID"]
potrebbe essere una scelta migliore per l'identificazione univoca di un utente?
L'objectGUID è un GUID per l'account o un GUID per il tipo di oggetto rappresentato dalla voce della directory? Inoltre, si dispone di un collegamento a qualsiasi documentazione che fornisce dettagli su ciascuna delle proprietà di voci di directory? –
È un GUID per il singolo account. È possibile visualizzarlo in Active Directory se si utilizza lo snap-in MMC ADSI Edit (http://technet.microsoft.com/en-us/library/cc773354(WS.10).aspx). – serialhobbyist
Ho aggiunto collegamenti al post principale in quanto il precedente sembrava essere un po 'storpiato. Non ero sicuro se volevi le proprietà dell'oggetto DirectoryEntry o dell'oggetto AD. In quest'ultimo caso, le persone AD tendono a parlarne come attributi. Quindi, un'istanza di una classe AD, come l'utente, ha attributi come displayName. Un'istanza di DirectoryEntry ha una proprietà Properties che contiene una raccolta di attributi e i relativi valori. Dovrebbe essere chiamato Attributi, IMO. – serialhobbyist