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?Active Directory: Recuperar información del usuario
Respuesta
Acceso al usuario directamente a través de un DirectoryEntry parece que 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, configúrelo en una cadena vacía, no nula. Null causa una excepción.
- Para borrar una propiedad con múltiples valores, 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 necesita actualizar RefreshCache() manualmente en un Director de sitio 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 ejecutar en cualquier momento que utilice las clases en System.DirectoryServices. Mantenga un ojo en esos bloques de prueba. No asumas que nada es seguro.
Probablemente necesite utilizar DirectorySearcher para obtener la entrada del directorio de su usuario si no conoce su ruta (que no lo haría, 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) (clase = usuario)). Esto está fuera de mi cabeza y puede ser ligeramente incorrecto.
El Active Directory schema reference será útil. Comprenda que el esquema se puede modificar y extender (por ejemplo, la instalación de Exchange agregará información del buzón a los usuarios).
AD Explorer es una herramienta útil que puede utilizar para la depuración y la administración de datos de bajo nivel de AD. 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.
He utilizado 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.
Tenga una mirada en el espacio de nombres System.DirectoryServices:
1 para una respuesta moderna. –
Puede encontrar el siguiente fragmento útil como iniciador.
public static bool IsUserInGroup(string lanid, string group)
{
DirectoryEntry entry = new DirectoryEntry("LDAP://" + LDAPPATH);
if(entry != null)
{
[email protected]"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));
}
Una muy buena referencia: Howto: (Almost) Everything In Active Directory via C#
Eché un vistazo a eso, pero en realidad no cubría lo que estaba buscando. Crear una referencia sin embargo :) –
Ese es el punto - para crear una referencia. – Panos
- 1. Recuperar propiedades específicas de Active Directory
- 2. Cómo recuperar SAMAccountName de Active Directory
- 3. javascript active directory usuario/grupos consulta
- 4. Active Directory: buscar solo objetos de usuario
- 5. C# Active Directory: ¿Obtener el nombre de dominio del usuario?
- 6. Permisos de usuario/grupo en Active Directory
- 7. Recuperar datos de usuario de NTLM Active Directory en Rieles sin IIS
- 8. Cómo recuperar información de usuario de un Grupo de seguridad de Active Directory usando LDAP y PHP
- 9. ldap nodejs active directory authentication
- 10. Autenticación de Active Directory
- 11. Active Directory vs OpenLDAP
- 12. Gerrit y Active Directory
- 13. Windows Active Directory Emulator
- 14. .NET: ¿Cómo buscar un usuario en Active Directory?
- 15. Ruta de LDAP Active Directory
- 16. Crear usuario de Active Directory en .NET (C#)
- 17. Crear usuario de Active Directory con contraseña en C#
- 18. Public Active directory for testing
- 19. Encontrar CN de usuarios en Active Directory
- 20. Conexión de flex/php a Active Directory
- 21. ¿Cómo se integra Delphi con Active Directory?
- 22. Buscar un nombre de usuario de dominio de Active Directory del llamante del servicio WCF
- 23. Active Directory Lista de OU
- 24. JNDI con Active Directory PartialResultException
- 25. Grupos anidados de Active Directory
- 26. Obteniendo grupos de usuarios en Active Directory
- 27. Obtener la unidad organizativa principal del usuario en Active Directory utilizando C#
- 28. Spring Security 3.1 utilizando Active Directory
- 29. Almacenar datos de aplicaciones en Active Directory
- 30. SAML Identity Provider basado en Active Directory
Acabo de agregar un código que es básicamente lo que dijiste.Usé el DirectorySearcher y obtuve la información que necesitaba. Afortunadamente, solo tengo que recuperar información muy básica. –
para mí, escribiendo ldap en minúscula lanzó una COMException. –