Запрос AD с использованием ldap / php

Исходная информация

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

Я использую это в качестве примера: http://php.net/manual/en/ldap.examples-basic.php

проблема

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

вот как выглядят мои результаты:

Connecting ...connect result is Resource id #26
Binding ...Bind result is 1
Searching for (sn=myusername*) ...Search result is Resource id #27

Getting entries ...
Data for 0 items returned:

Что я пробовал до сих пор:

У нас есть другое веб-приложение, которое работает на том же веб-сервере, что и приложение для виджетов. Это другое приложение настроено так, что apache будет запрашивать учетные данные AD. Я знаю, что это работает, потому что, когда я пытаюсь аутентифицировать себя в этом дополнительном приложении, мои учетные данные AD аутентифицируются, и я получаю разрешение, необходимое для использования приложения.

Поэтому я начал изучать apache conf и попытался убедиться, что мой PHP-код использует те же значения.

Код

Вот код PHP, который в настоящее время не работает:

public function ldap_test() {
            echo "<h3>LDAP query test</h3>";
            echo "Connecting ...";
            $ds=ldap_connect("10.11.11.1111");  // must be a valid LDAP server!
            echo "connect result is " . $ds . "<br />";

            if ($ds) {
                echo "Binding ...";
                //$r=ldap_bind($ds);
$r=ldap_bind($ds,"CN=testvalue1,OU=Services,OU=Accounts,DC=td,DC=ab,DC=org", "somepasswordvalue"); 
                // read-only access
                echo "Bind result is " . $r . "<br />";
                echo "Searching for (sn=myusername*) ...";

                // Search surname entry
                $sr=ldap_search($ds, "CN=testvalue1,OU=Services,OU=Accounts,DC=td,DC=ab,DC=org", "somepasswordvalue", "(sAMAccountName=myusername*)");
                echo "Search result is " . $sr . "<br />";

                echo "Number of entries returned is " . ldap_count_entries($ds, $sr) . "<br />";

                echo "Getting entries ...<p>";
                $info = ldap_get_entries($ds, $sr);
                echo "Data for " . $info["count"] . " items returned:<p>";

                for ($i=0; $i<$info["count"]; $i++) {
                    echo "dn is: " . $info[$i]["dn"] . "<br />";
                    echo "first cn entry is: " . $info[$i]["cn"][0] . "<br />";
                    echo "first email entry is: " . $info[$i]["mail"][0] . "<br /><hr />";
                }
                echo "Closing connection";
                ldap_close($ds);
            } else {
                echo "<h4>Unable to connect to LDAP server</h4>";
            }
    }

Конфигурация Apache, которую я использовал для создания своего кода PHP: (эта конфигурация работает и правильно запрашивает мои учетные данные AD и правильно аутентифицируется)

<AuthnProviderAlias ldap ldap-test>
    AuthLDAPBindDN "CN=testvalue1,OU=Services,OU=Accounts,DC=td,DC=ab,DC=org"
    AuthLDAPBindPassword somepasswordvalue
    AuthLDAPURL "ldap://10.11.11.111/ou=Accounts,dc=td,dc=ab,dc=org?sAMAccountName?sub?(objectClass=*)"
    AuthLDAPMaxSubGroupDepth 5
</AuthnProviderAlias>

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

Спасибо

1 ответ

Проблема была в том, что я фильтровал по общему имени. Обратите внимание на это:

 AuthLDAPBindDN "CN=testvalue1,OU=Services,OU=Accounts,DC=td,DC=ab,DC=org"

Так что, чтобы исправить это, я просто должен был удалить это из фильтра, и это сработало.

 AuthLDAPBindDN "OU=Services,OU=Accounts,DC=td,DC=ab,DC=org"
Другие вопросы по тегам