Как стать автором
Обновить

Поиск всех групп пользователя AD по протоколу LDAP

Время на прочтение2 мин
Количество просмотров44K
Мне по роду занятий часто приходится иметь дело с сервисами интегрирующимися с AD. К сожалению в большинстве таких сервисов напрочь отсутствует поддержка такой удобной «фичи» AD как Nested Groups
Неужели организовать перечисление всех вложенных групп пользователя так сложно?

На первый взгляд.

На первый взгляд для решения поставленной задачи как минимум потребуется организовать циклический вызов функций для получения групп, в которые входит группа пользователя и так далее. При таком подходе важно не забыть и обработать возможную ситуацию, когда группа A вложена в группу B, а группа B вложена в группу A.
А если проверка членства в группе вызывается достаточно часто, то такой подход может потребовать значительных вычислительных ресурсов.

Но выход есть.

Существует прекрасная статья Active Directory: LDAP Syntax Filters
В которой приведён интересный пример LDAP фильтра для получения групп пользователя, включая вложенные:
(member:1.2.840.113556.1.4.1941:=cn=Jim Smith,ou=West,dc=Domain,dc=com)

Также на MSDN есть статья Search Filter Syntax, описывающая имеющиеся Matching Rules, которые можно использовать в фильтрах LDAP совместно с Active Directory. В этой статье правило LDAP_MATCHING_RULE_IN_CHAIN описано более подробно:
Это правило применимо только к атрибутам типа distinguishedName. Этот специальный модификатор оператора совпадения позволяет обойти всё дерево вложенных объектов.


Таким образом задача обработки вложенности групп легко переносится на сервер AD.

Чем это знание может быть полезно администраторам?

Некоторые сервисы позволяют администратору при настройке задать LDAP фильтр для поиска групп пользователя — в таком случае администратор без вмешательства в код приложения может менять его поведение в отношении вложенных групп. Достаточно фильтры:
(member=cn=Jim Smith,ou=West,dc=Domain,dc=com)
(memberOf=cn=Sales,ou=West,dc=Domain,dc=com)

заменить на
(member:1.2.840.113556.1.4.1941:=cn=Jim Smith,ou=West,dc=Domain,dc=com)
(memberOf:1.2.840.113556.1.4.1941:=cn=Sales,ou=West,dc=Domain,dc=com)


Пример использования расширяемых правил сравнения на PowerShell
Теги:
Хабы:
Всего голосов 5: ↑4 и ↓1+3
Комментарии6

Публикации

Истории

Работа

Ближайшие события

Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург