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

StackOverflow https://stackoverflow.com/questions/84641

  •  01-07-2019
  •  | 
  •  

Вопрос

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

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

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

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 для передачи их в active directory.Я понимаю, что вы можете использовать LDAP для выполнения того же самого, но, насколько я знаю, учетные данные не могут быть переданы через него.

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

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

Это было полезно?

Решение

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

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

Вам придется включить расширение, вероятно, в вашем php.ini.Наверное, стоит посмотреть.

Другие советы

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

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

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

Это исправило оба моих PHP- и ASP-скрипта.

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top