Как прочитать членство в группе Active Directory из PHP / IIS с помощью COM? - PullRequest
1 голос
/ 17 сентября 2008

У меня есть следующий код:

$bind = new COM("LDAP://CN=GroupName,OU=Groups,OU=Division,DC=company,DC=local");

Когда я запускаю его из командной строки, он работает нормально. Когда он работает под IIS / PHP / ISAPI, он barfs.

Fatal error: Uncaught exception 'com_exception' with message 'Failed to create COM object `LDAP://CN=...[cut]...,DC=local':
An operations error occurred. ' in index.php
Stack trace:
  #0 index.php: com->com('LDAP://CN=...')
  #1 {main} thrown

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

Основная цель этого упражнения - воздержаться от сохранения учетных данных пользователя в моем сценарии и использования аутентификации IIS для передачи их в активный каталог. Я понимаю, что вы можете использовать LDAP для выполнения той же задачи, но, насколько я знаю, учетные данные не могут быть переданы.

Возможно, это каким-то образом связано с ошибкой, которую я получаю при попытке перенести ее на ASP. Я получаю ошибку 80072020 (которую я сейчас ищу).

Журналы событий не показывают ничего необычного. Нет предупреждений, нет ошибок. Полный аудит безопасности включен (успех и неудача для каждого элемента в политике безопасности), и он показывает успешные входы в Windows для каждого пользователя, которого я аутентифицирую на веб-странице (что ожидается.)

Ответы [ 4 ]

3 голосов
/ 17 сентября 2008

Поскольку вы используете проверку подлинности Windows в IIS, у вас могут быть некоторые события безопасности в журнале событий Windows. Я бы проверил журнал событий на наличие событий безопасности, а также событий приложений и выяснил, нет ли у вас проблем с разрешениями.

Кроме того, поскольку вы в основном просто общаетесь с AD через LDAP ... вы можете изучить использование собственной библиотеки LDAP для PHP, а не COM.

Возможно, вам потребуется включить расширение в вашем php.ini. Стоит посмотреть, наверное.

2 голосов
/ 17 сентября 2008

Кажется, сейчас работает.

Я включил «Доверять этот компьютер для делегирования» для объекта компьютера в Active Directory. Обычно IIS не может как аутентифицировать вас, так и впоследствии выдавать себя за вас по сети (в моем случае это контроллер домена для запроса Active Directory) без включенного доверия делегирования.

Вы просто должны быть уверены, что он аутентифицируется с использованием Kerberos, а не NTLM или какой-либо другой дайджест-аутентификации, поскольку дайджест не является доверенным для использования в качестве маркера олицетворения.

Исправлены мои скрипты PHP и ASP.

0 голосов
/ 17 сентября 2008

Я не специалист по AD / COM / IIS, но это может быть проблема с разрешениями. например, у пользователя IUSR_computername нет соответствующего доступа в каталоге, или вы не привязаны как конкретный пользователь?

Сигнал тревоги для меня заключается в том, что он работает нормально из командной строки (например, работает с вашими разрешениями), но не работает в IIS (например, не ваши разрешения).

0 голосов
/ 17 сентября 2008

Что ж, если вы хотите использовать LDAP, позвольте мне указать вам код аутентификации LDAP, который мы используем для Maia Mailguard: поищите функцию с именем lauth_ldap

Я думаю, что для этого требуется ldap версии 3, поэтому вы должны установить этот параметр для ldap. Чтобы проверить пароль, мы используем функцию привязки ldap, чтобы позволить серверу ldap аутентифицироваться.

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