Исходная информация
Я пытаюсь выяснить, как запросить у нашего активного сервера каталогов информацию о пользователях / группах через веб-приложение 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, поэтому я довольно зеленый.
Если у вас есть предложения для меня, пожалуйста, не стесняйтесь.
Спасибо
Проблема была в том, что я фильтровал по общему имени. Обратите внимание на это:
AuthLDAPBindDN "CN=testvalue1,OU=Services,OU=Accounts,DC=td,DC=ab,DC=org"
Так что, чтобы исправить это, я просто должен был удалить это из фильтра, и это сработало.
AuthLDAPBindDN "OU=Services,OU=Accounts,DC=td,DC=ab,DC=org"
Других решений пока нет …