2009-08-12 11 views
5

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

  1. è il principale richiesto al fine di identificare in modo univoco un individuo?
  2. È 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 DirectoryEntryProperties["objectGUID"] potrebbe essere una scelta migliore per l'identificazione univoca di un utente?

risposta

3

objectGUID è la scelta migliore per l'identificazione di un utente account. Evidenzia questo perché objectGUID è univoco e fisso per un'istanza di un account. Se elimini e ricrea l'account con lo stesso distinguishedName otterrai un objectGUID diverso. Quindi objectGUID non identifica l'utente, identifica l'account.

Quindi, se si desidera identificare l'account, utilizzare objectGUID.

A volte, gli account possono essere eliminati e ricreati dagli amministratori per risolvere i problemi. Se è necessario identificare l'utente anche dopo che questo è accaduto, è necessario selezionare qualcos'altro sull'oggetto account. Questo probabilmente dipenderà dalle politiche di definizione del tuo account. Forse hai sAMAccountNames che non sono basati sul nome dell'utente? Forse gli amministratori popolano dipendenti o dipendenti? Forse impongono l'unicità per displayNames?

Ecco un collegamento a AD attribute info. Ecco un collegamento a DirectoryEntry Properties.

+0

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? –

+0

È 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

+0

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

Problemi correlati