Как получить список всех отличительных имен (DN) из AD (LDAP) с помощью PHP?

Я хотел бы получить список всех DN, которые находятся внутри Active Directory, имея только базовое DN.

Также список всех групп и членов группы.

Используемый язык — PHP.

Если PHP не подходит для этой задачи, какой язык вы бы порекомендовали?

Ваше здоровье,


person Faisal Al-Tameemi    schedule 06.06.2012    source источник
comment
Удалось ли вам уже подключиться к серверу LDAP и запросить его? Если да, то какой код у вас есть? Большая часть волшебства здесь будет заключаться в создании поискового запроса.   -  person Charles    schedule 06.06.2012


Ответы (2)


PHP имеет расширение LDAP. Пока в вашей установке PHP включено это расширение, вы сможете легко подключаться к серверу AD и выполнять свои запросы.

После этого остается только выполнить вызов основных функций: ldap_connect(), ldap_bind(), ldap_search(), ldap_get_entries(), а затем итерации по набору результатов.

Имейте в виду, что если вы хотите внести изменения в AD (что здесь, похоже, не так), вам придется подключаться через SSL, который может иметь несколько ошибок, связанных с тем, что PHP видит SSL-сертификат вашего AD как доверенный.

person mpontes    schedule 06.06.2012
comment
mpontes: спасибо, но перефразируя мой вопрос, смогу ли я получить доступ ко всем группам и членам после подключения (используя ТОЛЬКО базовое DN), то есть ко всем подгруппам? потому что моя AD имеет древовидную структуру. так смогу ли я получить доступ даже к самому глубокому узлу с базовым DN? - person Faisal Al-Tameemi; 07.06.2012
comment
Если ваш вопрос касается фактического поискового запроса LDAP, который вы должны выполнить, а не того, как подключиться к LDAP и выполнить поиск через PHP, то ответ @Terry Gardner должен быть тем, который вы ищете. - person mpontes; 07.06.2012

Использовать:

  • Используйте пустую строку или ваше базовое DN для базового объекта
  • (objectClass=*) для фильтра
  • wholeSubtree или 2 или sub для области поиска
  • 1.1 для запрошенного списка атрибутов.

1.1 — это OID, который не соответствует типу атрибута, и сервер должен возвращать только отличительные имена (без атрибутов). (objectClass=*) — фильтр присутствует — все записи LDAP имеют как минимум атрибут objectClass.

Это вернет список всех отличительных имен — при условии, что администраторы сервера каталогов разрешают клиентам LDAP просматривать базу данных сервера каталогов (некоторые администраторы этого не разрешают).

Также будут возвращены различающиеся имена групп. Какие записи являются членами групп, будет зависеть от атрибута, используемого для именования членов.

person Terry Gardner    schedule 06.06.2012