Pregunta

Tengo una aplicación web que se ejecuta en la autenticación de Windows mediante nuestro Active Directory. Tengo un nuevo requisito para obtener 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?

¿Fue útil?

Solución

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

  • En una URI, escribe LDAP en minúsculas. De lo contrario obtendrá un error de misterio. 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. Nulo provoca una excepción.
  • Para borrar una propiedad de valor múltiple, use el método DirectoryEntry.Property.Clear () .
  • La referencia del esquema de Active Directory dirá qué tipo de datos será un valor y si es de valor múltiple o de valor único.
  • No es necesario actualizar RefreshCache () manualmente en un Directorio, pero si alguna vez lo usa y especifica qué propiedades almacenar en la caché, sepa que no recuperará ninguna otra propiedad en el futuro.
  • Se puede lanzar una COMException en cualquier momento en que use las clases en System.DirectoryServices. Mantenga un ojo en esos bloques de prueba. No asuma que algo es seguro.

Probablemente deba usar DirectorySearcher para obtener la entrada del directorio de su usuario si no conoce su ruta (lo cual no haría, solo con haberlo iniciado sesión). Su uso fue bastante fácil, pero tenga cuidado con las peculiaridades de la sintaxis LDAP; a saber, tener que codificar caracteres no ASCII (y otros?). La cadena de búsqueda que utilizarías probablemente sería algo como: (& amp; (sAMAccountName = alguna)) (class = usuario)) . Esto está fuera de mi cabeza y puede ser ligeramente incorrecto.

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

AD Explorer es una herramienta útil que puede usar para la depuración y gestión de datos AD de bajo nivel. Lo he encontrado ú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.

Otros consejos

Es posible que encuentre el siguiente fragmento de código útil como iniciador.

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));
}

Eche un vistazo al espacio de nombres System.DirectoryServices:

System.DirectoryServices Namespace

He usado 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 parte de la información relacionada con los grupos a los que pertenecen.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top