#php #filter #active-directory #ldap
#php #Фильтр #active-directory #ldap
Вопрос:
У меня есть PHP-скрипт, который подключается к Active Directory. Я могу успешно получить группы, но мне нужна помощь в получении пользователей / членов этих групп.
Приведенный ниже фильтр успешно извлекает все имена групп. Как я могу отредактировать свой фильтр, чтобы получить всех пользователей в этих группах.
$base_dn = "OU=My Folder, OU=Special Groups, DC=test, DC=co, DC=za";
$filter = "(amp;(objectClass=group))";
Ответ №1:
Это не так просто, как изменить фильтр и получить их все сразу. Вам нужно будет просмотреть результаты вашего запроса, а затем запросить членов каждой группы. Есть два способа сделать это (внутри цикла):
- Привяжитесь к объекту группы и посмотрите на
member
атрибут, который даст вам различимое имя каждого члена. - Выполните новый запрос, чтобы найти пользователей, у которых
memberOf
атрибут содержит различимое имя группы. Фильтр будет выглядеть примерно так:
(amp;(objectClass=user)(objectCategory=person)(memberOf={$groupDn}))
Если в вашем лесу более одного домена или у вас есть внешние доверенные домены, просмотр memberOf
может не найти всех участников. Если вы не заботитесь о пользователях в других доменах, с вами всегда все будет в порядке. Но будьте осторожны. У меня есть объяснение в статье, которую я написал: Active Directory: что делает участника участником?. Посмотрите подзаголовок «Остерегайтесь memberOf».
Ответ №2:
Если вы запрашиваете Active Directory, вы можете запросить атрибут TokenGroup пользователя или группы, чтобы получить полный список групп, членом которых является объект. Есть некоторые ограничения на использование этого метода, возвращаемые значения являются идентификаторами групп, вам нужно будет вызвать функцию LookupAccountSid, чтобы получить имена групп. Атрибут TokenGroup является сконструированным атрибутом, и он возвращается только в том случае, если область поиска является БАЗОВОЙ, запрос с ONELEVEL или ПОДДЕРЕВОМ не вернет атрибут.