Я новичок в LDAP и Active Directory. Я пытаюсь получить Email-ID аутентифицированного пользователя, используя следующий код. Однако, когда я запускаю его, все, что я получаю, это массив с 0 в нем.
Вот код
$server ='ldaps://DOMAIN';
$username = 'DOMAIN\UID';
$password = 'PASSWORD';
$base_dn = 'dc=DOMAIN';
$search_filter = 'dn=UID';
$attributes = ['mail'];
$ldap = ldap_connect($server);
ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($ldap, $username, $password);
$search = ldap_search($ldap, $base_dn, $search_filter, $attributes);
$data = ldap_get_entries($ldap, $search);
foreach($data as $dataPoint)
{
echo $dataPoint;
echo "<hr>";
}
Это выводит только 0 с горизонтальной линией под ним.
Самое сложное в том, что здесь нет сообщений об ошибках, и я не очень хорошо знаком ни с LDAP, ни с Active Directory.
Любая идея о том, почему это может происходить.
Я вижу несколько вещей, которые потенциально могут вызывать проблемы из кода выше:
ldaps://
? Обычно это не то, что вы хотите сделать. Если вы хотите использовать зашифрованное соединение, вы должны использовать ldap_start_tls и звонок должен быть сделан после ldap_connect
, Для целей тестирования я бы просто изменил его на ldap://
,$base_dn
переменная, кажется, отсутствует часть домена. Это должно быть не имя NETBIOS вашего домена, а полное доменное имя. Так что если ваш домен был domain.com
тогда база dn будет dc=domain,dc=com
,$search_filter
) неправильно сформирован. Если вы пытаетесь получить пользовательский объект из LDAP с заданным именем учетной записи, вы можете использовать поисковый фильтр, например: (sAMAccountName=UID)
Чтобы получить лучшее представление о том, что может идти не так, вы можете использовать ldap_error и позвоните после подключения: echo "Error: ".ldap_error($ldap);
, Вы можете сделать это после любого вызова, связанного с LDAP, чтобы получить больше информации о том, что могло пойти не так.
Других решений пока нет …