Estoy utilizando Active Directory en una clase MembershipProvider personalizada para autenticar usuarios en una aplicación de intranet ASP.NET 2.0 y asociar su sid con un perfil para la aplicación.ASP.NET - Obtener el identificador principal/relativo (RID) para un DirectoryEntry/SID
Cuando se utiliza el ActiveDirectoryMembershipProvider
, el objeto ProviderUserKey
para la MembershipUser
es como sigue
SecurityIdentifier sid = (SecurityIdentifier)Membership.GetUser().ProviderUserKey;
string sidValue = sid.ToString();
/* sidValue = "S-1-5-21-XXXX-XXXX-XXXX-YY" */
Como lo entiendo, YY
es el principal dentro del espacio de nombres (también referido como un grupo/dominio).
Cuando se utiliza el MembershipProvider costumbre, puede conseguir el SID utilizando la propiedad objectSid
de un objeto 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" */
El sidValue
en este caso es idéntico, excepto que no contiene el director YY
.
Mi pregunta es doble
- es el principal necesaria con el fin de identificar de forma exclusiva un individuo?
- ¿Es posible obtener el principal desde el objeto DirectoryEntry (o mediante cualquier otra clase disponible en
System.DirectoryServices
)?
EDIT:
Después de haber hecho un poco de lectura adicional ({1}{2}), ahora sabemos que el SID puede cambiar si el usuario se mueve de un grupo/dominio a otro. A la luz de esto, ¿sería mejor utilizar el GUID
definido en DirectoryEntry
Properties["objectGUID"]
para identificar de manera única a un usuario?
¿Es el objectGUID un GUID para la cuenta o un GUID para el tipo de objeto que representa la entrada del directorio? Además, ¿tiene un enlace a cualquier documentación que proporcione detalles sobre cada una de las propiedades de entrada de directorio? –
Es un GUID para la cuenta individual. Puede verlo en Active Directory si usa ADSI Edit MMC Snap-in (http://technet.microsoft.com/en-us/library/cc773354(WS.10).aspx). – serialhobbyist
He agregado enlaces a la publicación principal ya que la anterior parecía estar un poco destrozada. No estaba seguro de si deseaba las propiedades del objeto DirectoryEntry o el objeto AD. En el último caso, las personas con AD tienden a hablar de ellos como atributos. Por lo tanto, una instancia de una clase AD, como el usuario, tiene atributos como displayName. Una instancia de DirectoryEntry tiene una propiedad de propiedades que contiene una colección de atributos y sus valores. Debería llamarse Atributos, IMO. – serialhobbyist