c# - usuarios - Autenticar usuario en Catálogo global
obtener nombre de usuario de windows c# (1)
Necesito autenticar las credenciales de Windows del usuario, dado un ID de usuario, dominio y contraseña. Nuestro Directorio Activo contiene múltiples dominios, algunos de los cuales podemos enumerar usando el siguiente código:
var domains = System.DirectoryServices.ActiveDirectory.Forest.GetCurrentForest().Domains;
Sin embargo, también tenemos usuarios que pertenecen a dominios fuera del bosque. Sin embargo, son accesibles para mí desde el Catálogo Global (GC). El siguiente código me permite obtener una entrada de directorio para un ID de usuario.
System.DirectoryServices.DirectoryEntry globalCatalogDE = new System.DirectoryServices.DirectoryEntry("GC://DC=nsroot,DC=net");
var ds = new System.DirectoryServices.DirectorySearcher(globalCatalogDE);
ds.Filter = "(&(objectClass=user)(sAMAccountName=" + userId + "))";
System.DirectoryServices.DirectoryEntry userDE = ds.FindAll()[0].GetDirectoryEntry();
¿Cómo autentico a un usuario que pertenece a un dominio al que no puedo acceder directamente pero que está disponible para mí en el GC?
No puede autenticar a un usuario buscando en el Catálogo global, es solo para búsquedas (cualquier atributo marcado con el isMemberOfPartialAttributeSet
en el esquema para cada dominio se replica en el GC).
Las contraseñas no se replican en él; de lo contrario, tendrías las contraseñas de todos los usuarios en todo el bosque de cada controlador de dominio, lo que sería muy malo desde el punto de vista de la seguridad y la replicación. Debe establecer una conexión con el dominio donde se almacenan las credenciales del usuario (es decir, necesita acceder a los puertos LDAP 389 o 636).