information active c# active-directory

c# - information - Active Directory: Recuperar información del usuario



connect to active directory c# (5)

Tengo una aplicación web que se ejecuta en la Autenticación de Windows utilizando nuestro Directorio Activo. Tengo un nuevo requisito para extraer información personal a través de la entrada de Active Directory. ¿Cuál sería la forma más fácil de acceder a esta información?


Acceder al usuario directamente a través de DirectoryEntry parece ser el enfoque más directo. Aquí hay algunos datos relacionados con AD que aprendí de mi primer proyecto relacionado con AD:

  • En un URI, escriba LDAP en minúsculas. De lo contrario, obtendrá un error misterioso. Pasé más de un día en este tema deprimente ...
  • Para borrar una propiedad de un solo valor, establézcala en una cadena vacía, no nula. Null causa una excepción.
  • Para borrar una propiedad multivaluada, use el método DirectoryEntry.Property.Clear () .
  • La referencia de esquema de Active Directory indicará qué tipo de datos será un valor y si tiene valor múltiple o valor único.
  • No es necesario que actualice RefreshCache () manualmente en un Directoryentry, pero si alguna vez lo usa y especifica qué propiedades va a almacenar en caché, sepa que no recuperará automáticamente otras propiedades en el futuro.
  • Una COMException se puede lanzar en cualquier momento que use las clases en System.DirectoryServices. Mantenga un ojo en esos bloques de prueba. No asumas que nada es seguro.

Probablemente necesites usar DirectorySearcher para obtener la entrada del directorio de tu usuario si no conoces su ruta (que no lo harías, simplemente por tenerlo conectado). Usarlo fue bastante fácil, pero ten cuidado con las peculiaridades de la sintaxis de LDAP; a saber, tener que codificar caracteres que no sean ASCII (¿y otros?). La cadena de búsqueda que usaría probablemente sería algo así como: (& (sAMAccountName = whatever) (class = user)) . Esto está fuera de mi cabeza y puede ser ligeramente incorrecto.

La referencia de esquema de Active Directory será útil. Comprenda que el esquema puede modificarse y ampliarse (por ejemplo, la instalación de Exchange agregará información del buzón a los usuarios).

AD Explorer es una herramienta útil que puede usar para la depuración y la administración de datos AD de bajo nivel. Lo encontré útil cuando sé qué propiedad quiero establecer pero no puedo encontrar el cuadro de diálogo correcto en la herramienta de administración de AD.



Puede encontrar el siguiente fragmento útil como inicio.

public static bool IsUserInGroup(string lanid, string group) { DirectoryEntry entry = new DirectoryEntry("LDAP://" + LDAPPATH); if(entry != null) { entry.Username=@"LDAPUSER"; entry.Password="LDAPPASSWORD"; DirectorySearcher srch = new DirectorySearcher(entry); srch.Filter = String.Format("(&(objectClass=person)(sAMAccountName={0}))", lanid); srch.PropertiesToLoad.Add("memberOf"); SearchResult result = srch.FindOne(); if(result != null) { if(result.Properties.Contains("memberOf")) { string lookfor = String.Format("cn={0},", group.ToLower()); foreach(string memberOf in result.Properties["memberOf"]) { if(memberOf.ToLower().StartsWith(lookfor)) return true; } } } return false; } throw new Exception(String.Format("Could not get Directory lanid:{0}, group{1}", lanid, group)); }



Utilicé una biblioteca LDAP estándar para recuperar información de un servidor de Active Directory, pero tendría que verificar que los datos que necesita estén disponibles a través del esquema del servidor LDAP. En general, puede obtener cualquier información almacenada en InetOrganizationalPerson y la mayoría de la información relacionada con los grupos a los que pertenecen.