Intereting Posts
Сортировка массива php массивов по индивидуальному заказу php.ini – командная строка PHP и WAMP-сервер для доступа к различным файлам UNIX timestamp (0): Европа / Лондон возвращает UTC + 1 Дата вставляется как 0000-00-00 00:00:00 в mysql Magento. Вставить блок в другой без кода шаблона изменения как использовать php для включения изображения в текстовый файл? PHP Неустранимая ошибка: Class 'Controllercommon' не найден в C: \ Inetpub \ Low Vision – Филиппины \ vqmod \ vqcache \ vq2-system_engine_loader.php в строке 28 значение поля ввода для изменения при выборе различных вариантов выпадающего меню Как получить даты с резервированием? Автоматическое обновление при поступлении нового пользователя Найти документ с ObjectID в mongoDB Обтекание элементов массива в div, основанных на одном значении Почему скрипт php может остановиться? Получение относительного пути от абсолютного пути в PHP Как получить результат из необработанного запроса MySQL в Laravel?

Поиск в Active Directory через PHP

Как вы можете выполнять поиск в Active Directory через PHP? Без необходимости перекомпиляции PHP. Версия PHP – 5.3

Я хочу найти отображаемое имя лица из своего имени пользователя. Веб-сервер – IIS 6, а PHP – с использованием FastCGI.

Я получаю имя пользователя:

$cred = explode('\\',$_SERVER['REMOTE_USER']); if (count($cred) == 1) array_unshift($cred, "(no domain info - perhaps SSPIOmitDomain is On)"); list($domain, $user) = $cred; return $user; 

Итак, как я могу найти название? например DoeJ = John Doe

Редактировать:

Попытка поиска пользователя, но не уверен, как найти «базовое DN». Не иметь прямого доступа к серверу Active Directory или иметь права администратора, поэтому подключайтесь анонимно.

 <?php //using ldap bind anonymously // connect to ldap server $ldapconn = ldap_connect("example.co.uk") or die("Could not connect to LDAP server."); if ($ldapconn) { // binding anonymously $ldapbind = ldap_bind($ldapconn); if ($ldapbind) { echo "LDAP bind anonymous successful..."; ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION,3); ldap_set_option($ldapconn, LDAP_OPT_REFERRALS,0); $dn = "CN=Users"; // also tried DC=example,DC=co,DC=uk $filter="(SAMAccountName=username)"; $justthese = array("ou", "sn", "givenname", "mail"); $sr=ldap_search($ldapconn, $dn, $filter, $justthese); $info = ldap_get_entries($ds, $sr); echo $info["count"]." entries returned\n"; } else { echo "LDAP bind anonymous failed..."; } } ?> 

Ошибка в ldap_search: Предупреждение: ldap_search () [function.ldap-search]: Поиск: ошибка операций

    OK – прежде всего, вам необходимо, чтобы ext/ldap с вашим сервером Active Directory через интерфейс LDAP. Очевидно, что это требование выполняется с вашей установкой PHP (иначе вы получите ошибки о неопределенных функциях).

    Вопрос в том, на каком сервере Windows вы кодируете? Начиная с Windows Server 2003 анонимные привязки по умолчанию отключены , а это значит, что вы не можете выполнить поиск в дереве Active Directory без проверки подлинности с использованием уже имеющегося и авторизованного пользователя. (Чтобы включить анонимные привязки, смотрите здесь – но поскольку у вас нет прав администратора, вы не сможете это изменить)

    Вторая проблема – ваше базовое DN, которое фактически является местоположением в вашем дереве LDAP, из которого будет выполняться операция поиска. DN базы нормалей для контейнера пользователей должен быть CN=Users,DC=yourdomain,DC=yourtopleveldomain , который, например, CN=Users,DC=example,DC=local .

    Фильтр, который вы используете, на самом деле правильный: (SAMAccountName=username) найдет запись учетной записи для username . Чтобы использовать переменную имени пользователя, вы можете:

     $filter = sprintf('(SAMAccountName=%s)', $user); 

    Общий поток кода, однако, также кажется правильным.

    Подведем итог: сначала вам нужно будет проверить, поддерживает ли ваш Active Directory анонимные привязки, а затем вам придется настроить базовый DN вашего поиска. Если анонимные привязки не разрешены, вам придется использовать пользователя, которому разрешено связываться с Active Directory.

    Параметр ldap_get_entries функции ldap_get_entries неверен:

     $info = ldap_get_entries($ldapconn, $sr); 

    Протестировано таким образом, и ваш код работает сейчас.

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

    Если вы можете использовать его, вы можете посмотреть ldap_search ()

    Поскольку вы используете IIS, это означает, что вы используете php для Windows, что в свою очередь означает, что вы можете включить расширение LDAP без перекомпиляции php. Это должно решить большинство ваших проблем.