PHP ldap – требуется проверка подлинности (er)

У меня есть PHP-скрипт, который связывает LDAP, связывает и выполняет поиск. Он работает очень хорошо с большинством серверов Active Directory, однако у одного из наших клиентов есть проблема. Сценарий возвращается

Strong(er) authentication required. 

при попытке ldap_bind.

Все поиски, которые я сделал, привели меня к двум возможным проблемам:

  1. Я должен установить LDAP_OPT_PROTOCOL_VERSION в 3 – что я делаю и делал раньше, так что это не может быть моей проблемой.
  2. Сервер AD настроен на использование SSL-аутентификации – но наш клиент настаивает на том, что он является установкой сервера Windows 2008 R2 по умолчанию и не поддерживает SSL по умолчанию.

Какие другие причины могут быть для этой ошибки?

ОБНОВИТЬ

На сервере Active Directory требовался SSL …

Вы должны использовать ldaps:// если это требуется сервером Active Directory. Если это проблема с недопустимым центром сертификации, вы можете игнорировать действительность в окнах, выпуская

 putenv('LDAPTLS_REQCERT=never'); 

в вашем php-коде. В /etc/ldap.conf * nix вам необходимо отредактировать файл /etc/ldap.conf чтобы он содержал

 TLS_REQCERT never 

Для других распространенных проблем вы можете ссылаться на мой пост на PHP не удается подключиться к LDAP Oracle Directory Server Enterprise Edition

Для кода рабочего примера вы можете посмотреть: проблемы с безопасным привязкой к Active Directory с помощью PHP

У меня была такая же проблема, и, похоже, в моем bind_rdn была опечатка, поэтому убедитесь, что учетные данные верны.

Сообщение «Сильная проверка подлинности (er)» появляется также, если вы попытаетесь обновить объект LDAP, используя:

  • ldap_modify
  • ldap_mod_replace
  • ldap_modify_batch

Без вызова функции bind с дополнительными параметрами:

  string $bind_rdn = NULL [, string $bind_password = NULL 

Этот код не будет работать:

 $ldap = ldap_connect($ldap_url); ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3); ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0); $bind = ldap_bind($ldap); $userdata=array(); $userdata['userattribute'][0]='test'; ldap_modify ($ldap, "cn=myuser,dc=example,dc=com", $userdata); 

Этот код работает, обратите внимание на другую функцию вызова функции bind:

 $ldap = ldap_connect($ldap_url); ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3); ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0); $bind = ldap_bind($ldap,'cn=admin,dc=example,dc=com','secretpassword'); $userdata=array(); $userdata['userattribute'][0]='test'; ldap_modify ($ldap, "cn=myuser,dc=example,dc=com", $userdata);