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

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

2 голосов
/ 12 ноября 2009

Как вы можете выполнять поиск в 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 = Джон Доу

Edit:

Попытка поиска пользователя, но не уверен, как найти «базовое 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]: Поиск: Ошибка операций

Ответы [ 4 ]

7 голосов
/ 12 ноября 2009

ОК - во-первых, вам нужно 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.

0 голосов
/ 22 октября 2013

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

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

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

0 голосов
/ 12 ноября 2009

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

0 голосов
/ 12 ноября 2009

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

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

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