Есть ли способ определить, находится ли человек в указанной группе в Active Directory, даже если группа имеет несколько уровней - PullRequest
2 голосов
/ 22 декабря 2010

Иногда архитектура в активном каталоге очень сложна.В моем AD много групп, и они иерархические.

Возьмем для примера: группа A является верхней группой, у нее есть дочерняя группа B, а у группы B также есть дочерний C. C - это конечный узел, и это человек в AD.Есть ли подход для идентификации C является членом группы А.

Я могу сделать это, перечислив свойство "memberof" рекурсивно в AD.Но есть ли более эффективный механизм для этой работы?

Мне нужно сделать это в .NET с C #.Любая помощь будет оценена.

Ответы [ 2 ]

2 голосов
/ 22 декабря 2010

Извлечение UserPrincipal.GetAuthorizationGroups . Это дает вам все группы в токене, как упомянуто Swanny

1 голос
/ 22 декабря 2010

Не уверен, что есть лучший способ в наши дни, но именно так мы и сделали в день .Net 1.0. Я думаю, что есть метод GetTokens () или что-то в этом роде. Он может быть доступен только через интерфейс COM (поэтому вам нужно обернуть его во взаимодействие). Он возвращает вам список идентификаторов безопасности для каждой вещи, членом которой в конечном итоге является пользователь (даже если группа в группе внутри группы), а затем вы можете просто получить идентификатор безопасности интересующей вас группы и проверить, в списке, возвращенном ранее. Получение списка SID немного трудоемко, поэтому вы можете кэшировать результат. Если вы делаете много звонков одновременно, вы можете замедлить AD.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...