Tengo una aplicación que utiliza la autorización ActiveDirecotry y se ha decidido que necesita admitir grupos anidados, por ejemplo:Cómo determinar todos los grupos a los que pertenece un usuario (incluidos los grupos anidados) en ActiveDirectory y .NET 3.5
MAIN_AD_GROUP
|
|-> SUB_GROUP
|
|-> User
Por lo tanto, el usuario en no directamente un miembro de MAIN_AD_GROUP
. Me gustaría poder buscar al usuario recursivamente, buscando en los grupos anidados en MAIN_AD_GROUP
.
El principal problema es que estoy usando .NET 3.5 y hay un error en System.DirectoryServices.AccountManagement
en .NET 3.5 mediante el cual el método UserPrincipal.IsMemberOf()
no funcionará para grupos con más de 1500 usuarios. Entonces no puedo usar UserPrincipal.IsMemberOf()
y no, tampoco puedo cambiar a .NET 4.
He trabajado en torno a este último problema con la siguiente función:
private bool IsMember(Principal userPrincipal, Principal groupPrincipal)
{
using (var groups = userPrincipal.GetGroups())
{
var isMember = groups.Any(g =>
g.DistinguishedName == groupPrincipal.DistinguishedName);
return isMember;
}
}
Pero userPrincipal.GetGroups()
sólo devuelve el grupo del que el usuario es miembro directo.
¿Cómo puedo hacer que esto funcione con grupos anidados?
Elegí implementar la Solución # 2. YMMV con la Solución # 1. –
Buena publicación. La solución n.º 1 falla en iterGroup.MoveNext() con el mismo error "No hay tal objeto en el servidor". – Kjensen
La solución 2 solo puede funcionar si el programa se ejecuta desde una computadora que ha iniciado sesión en el dominio. No puede funcionar si está consultando el ldap desde un dominio diferente. –