¿Qué campo usar al autenticar contra Active Directory?


12

Los objetos de usuario de Active Directory incluyen varios campos que pueden considerarse un identificador. A continuación se enumeran algunos de estos con su etiqueta en ADUC y su nombre de atributo:

  • Nombre completo - cn
  • ? - nombre
  • Inicio de sesión de usuario sAMAccountName - sAMAccountName
  • Inicio de sesión de usuario UPN: userPrincipalName
  • ? - nombre distinguido

Estoy tratando de lograr que nuestros desarrolladores estandaricen el uso de solo uno de estos cuando escribo código personalizado que se autentica contra AD; el problema es que no estoy seguro de cuál es el "correcto", o si diferentes son los correctos en diferentes circunstancias. ¡Ni siquiera estoy seguro de que alguno de los campos anteriores deba usarse!

¿Alguien más ha elegido uno para usar consistentemente, y qué te influyó en esa decisión? ¿Alguna documentación que aclare el problema?


He encontrado algunas aplicaciones (desarrolladas internamente y otras cosas que otras personas han hecho) que se autentican a través de LDAP utilizando el campo cn. Este campo ahora se actualiza automáticamente en el Centro de administración de AD (está etiquetado como Nombre completo) si cambia los campos de nombre o apellido, lo que significa que no puede asumir que el campo cn puede considerarse un campo de nombre de usuario. ¿Han estado utilizando estos desarrolladores el campo incorrecto o Microsoft ha roto el cn?
dunxd

Respuestas:


18

Un CN (nombre común) no es bueno para iniciar sesión, porque un CN por sí solo no identifica de forma exclusiva a un usuario. Podría tener un

CN=Ryan Ries,OU=Dallas,DC=Domain,DC=com

y también podría tener un

CN=Ryan Ries,OU=New York,DC=Domain,DC=com

El CN de un usuario también es un RDN (nombre distinguido relativo). Tienen el mismo CN, pero diferentes DN. Puede notar que tiene problemas si tiene dos personas en su organización llamadas Ryan Ries, y tendrá que hacer que SamAccountName para el segundo sea algo así rries2.

Un DN (nombre distinguido) no es bueno para iniciar sesión, porque ¿quién quiere iniciar sesión en un sistema con un nombre de usuario como CN=ryan,OU=Texas,DC=brazzers,DC=com? Si bien el uso de un DN identifica de manera única y definitiva a un usuario, es molesto tener que escribir. Es el mismo tipo de concepto entre rutas relativas y rutas absolutas en un sistema de archivos. También implica que sabe exactamente en qué parte de la estructura del directorio se encuentra el objeto sin tener que buscarlo. Lo que a menudo no haces.

Esto se llama Resolución de nombre ambigua (ANR): busca en el directorio un usuario cuando no tiene su nombre distinguido.

UPN (nombre principal del usuario) es bastante bueno porque parecen direcciones de correo electrónico, pueden ser iguales a la dirección de correo electrónico corporativa del usuario, son fáciles de recordar y se prefiere iniciar sesión porque se buscará el nombre primero en el dominio local, antes de buscarlo en el bosque.

Microsoft dice: El objetivo de UPN es consolidar los espacios de nombres de correo electrónico e inicio de sesión para que el usuario solo necesite recordar un solo nombre. El UPN es el nombre de inicio de sesión preferido para los usuarios de Windows. Los usuarios deberían usar sus UPN para iniciar sesión en el dominio. En el momento del inicio de sesión, un UPN se valida primero buscando en el dominio local, luego en el catálogo global. Si no se encuentra el UPN en el dominio local o el GC, se rechaza el UPN. El UPN se puede asignar, pero no es obligatorio , cuando se crea la cuenta de usuario.

Tenga en cuenta ese bit "no requerido" al final al diseñar sus aplicaciones.

SamAccountName también es bueno porque SamAccountName necesita ser único para todos en el dominio (pero no para el bosque). Además, SamAccountNames son cortos. La mayoría de las personas inician sesión con SamAccountNames, a pesar de que no lo identifican de forma exclusiva en un bosque de AD, por lo que debe especificar un nombre de dominio que vaya junto con su SamAccountName para que el sistema sepa en qué dominio está intentando iniciar sesión. .

Aquí hay una gran documentación sobre el tema para leer más:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms677605(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/windows/desktop/ms680857(v=vs.85).aspx


4

Si se refiere al nombre de usuario como algo que alguien escribiría para iniciar sesión, recomendaría cualquiera sAMAccountName, que sería único en combinación con un nombre de dominio, o el userPrincipalName, que sería único dentro de un bosque.

En cuanto al nombre de usuario como identificador único, Windows usa el SID para todas las entradas de control de acceso y proporciona un conjunto completo de métodos para traducir a SID desde los nombres de usuario. Los SID coinciden con la metáfora del usuario durante la vida útil de una cuenta, ya que los cambios de nombre y movimientos dentro de un dominio no tienen ningún efecto, pero eliminar y volver a crear resultados en un nuevo SID.

Con ese fin, llamaría LookupAccountName, que toma una cadena que representa el nombre de usuario y devuelve el sAMAccountName, el SIDy el nombre de dominio del dominio en el que se encontró el usuario.

El usuario puede usar cualquier sintaxis compatible con Windows para iniciar sesión, y no se requiere capacitación adicional.


¿LookupAccountName acepta UPN o sAMAccountName o DOMAIN \ sAMAccountName totalmente calificado, o todo lo anterior? No está claro en la documentación a la que se vincula.
dunxd

Las listas de documentación que soporta los formatos: DOMAIN\Account, DOMAIN.COM\Account, Account, Account@DOMAIN.COM. Dice que los nombres completos son más rápidos, pero los otros aún están disponibles.
Mitch

0

Recomendaría permitir al usuario elegir el formato del nombre que desea usar y determinar la entrada del usuario en el lado de la aplicación. por ejemplo: si el usuario escribe: nombredeusuario@dominio.com, considérelo como UPN y busque UPN en AD. Si el usuario escribe: nombre de usuario: considérelo como samAccountName para un dominio predeterminado predefinido y, por supuesto, si el usuario escribe dominio \ nombre de usuario, considérelo como samAccountName del dominio especificado. Siempre recupere el SID del usuario y asigne todos los permisos al SID porque las personas se casan y el nombre de usuario puede cambiar.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.