c# asp.net active-directory asp.net-membership sid

c# - ASP.NET: obtenga el identificador principal/relativo(RID) para un DirectoryEntry/SID



active-directory asp.net-membership (1)

El objectGUID es la mejor opción para identificar una cuenta de usuario. Resalto esto porque objectGUID es único y está fijado para una instancia de una cuenta. Si elimina y vuelve a crear la cuenta con el mismo distinguishedName obtendrá un objectGUID diferente. Entonces, objectGUID no identifica al usuario, identifica la cuenta.

Por lo tanto, si desea identificar la cuenta, use objectGUID.

Algunas veces, las cuentas pueden ser eliminadas y recreadas por los administradores para resolver problemas. Si necesita identificar al usuario incluso después de que esto sucedió, debe elegir algo más en el objeto de la cuenta. Eso probablemente tendrá que depender de las políticas de definición de su cuenta. Tal vez usted tiene sAMAccountNames que no se basan en el nombre del usuario? ¿Tal vez los administradores llenan employeeid o employeeNumber? Tal vez ellos hacen cumplir la singularidad de displayNames?

Aquí hay un enlace a la información del atributo AD . Aquí hay un enlace a Propiedades de entrada de directorio .

Estoy usando 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.

Cuando se usa ActiveDirectoryMembershipProvider , el objeto ProviderUserKey para MembershipUser es el siguiente

SecurityIdentifier sid = (SecurityIdentifier)Membership.GetUser().ProviderUserKey; string sidValue = sid.ToString(); /* sidValue = "S-1-5-21-XXXX-XXXX-XXXX-YY" */

Según lo entiendo, YY es el principal dentro del espacio de nombres (también conocido como grupo / dominio).

Al utilizar el MembershipProvider personalizado, puedo obtener 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 YY principal.

Mi pregunta es doble

  1. ¿Se requiere el director para identificar de manera única a un individuo?
  2. ¿Es posible obtener el principal desde el objeto DirectoryEntry (o mediante cualquier otra clase disponible en System.DirectoryServices )?

EDITAR:

Después de haber leído algo más ( {1} {2} ), ahora sé que el sid puede cambiar si el usuario se mueve de un grupo / dominio a otro. A la luz de esto, ¿sería mejor usar el GUID definido en DirectoryEntry Properties["objectGUID"] para identificar de forma única a un usuario?