У меня есть приложение, которое использует авторизацию ActiveDirecotry, и было решено, что ему необходимо поддерживать вложенные группы AD, например:
MAIN_AD_GROUP
|
|-> SUB_GROUP
|
|-> User
Таким образом, пользователь не является непосредственно членом MAIN_AD_GROUP
. Я хотел бы иметь возможность искать пользователя рекурсивно, поиск групп, вложенных в MAIN_AD_GROUP
.
Основная проблема заключается в том, что я использую .NET 3.5 и есть ошибка в System.DirectoryServices.AccountManagement
в .NET 3.5, в которой метод UserPrincipal.IsMemberOf()
не будет работать для групп с более 1500 пользователей. Поэтому я не могу использовать UserPrincipal.IsMemberOf()
и нет, я не могу переключиться на .NET 4.
Я работал над этой последней проблемой со следующей функцией:
private bool IsMember(Principal userPrincipal, Principal groupPrincipal)
{
using (var groups = userPrincipal.GetGroups())
{
var isMember = groups.Any(g =>
g.DistinguishedName == groupPrincipal.DistinguishedName);
return isMember;
}
}
Но userPrincipal.GetGroups()
возвращает только те группы, членом которых является прямой член.
Как я могу заставить это работать с вложенными группами?