Я использую Зенд Лдап для создания системы аутентификации для приложения PHP. Пользователи хранятся в Active Directory.
Вот конфиг для ldap:
'host' => 'ad-host',
'port' => '389',
'useStartTls' => false,
'accountDomainName' => 'SOMEDOMAIN.local',
'accountDomainNameShort' => 'SOMEDOMAIN',
'baseDn' => 'DC=somedomain,DC=local',
'accountCanonicalForm' => 3
Теперь, когда я привязываюсь через имя пользователя (скажем: testuser) и пароль, имя пользователя фактически используется как: SOMEDOMAIN\testuser
и я могу успешно пройти аутентификацию, но когда я меняю accountDomainNameShort to SOMEDOMAIN.local, я получаю сообщение об ошибке Invalid Credentials. Теперь есть мой друг, который находится в другом домене, но имеет доступ к ad-host. Этот пользователь может аутентифицироваться через ldap, когда accountDomainNameShort is SOMEDOMAIN.local, но когда он использует accountDomainNameShort as just SOMEDOMAIN, он не может подключиться к серверу LDAP и получает исключение Ldap server Down. Это исключение было приемлемо для меня, полагая, что ему нужно полное имя.
Но проблема в том, что когда я вхожу в систему с Windows через одного и того же пользователя (testuser), я могу войти, используя оба: SOMEDOMAIN.local\testuser и SOMEDOMAIN\testuser, но когда я вхожу в систему через Ldap, я не могу сделать это с SOMEDOMAIN.local\testuser. Меня действительно беспокоит, почему он ведет себя по-другому? Отличается ли аутентификация окна AD от аутентификации Ldap? Если да, то почему аутентификация ldap позволяет ВХОДИТЬ моему другу, когда он использует SOMEDOMAIN.local. Каким должен быть мой accountDomainNameShort ??
Да, я проверил, что, когда я не предоставляю конфигурации AccountDomainNameShort и accountCanonicalForm, я могу войти в систему с помощью чего-то вроде: [email protected], как вы упомянули. Но не понимаю, почему SOMEDOMAIN.local\testuser не подходит для меня и подходит для моего друга?
Если вы предоставите username как «тестового пользователя» (без домена), будет ли он работать в обоих случаях?
Windows, вероятно, творит чудеса, если вы наберете «SOMEDOMAIN.local \ testuser». Скорее всего, не сам AD.
Другой пользователь находится в другом домене, поэтому он будет недоступен без имени ДОМЕНА. Спасибо за комментарий magic :). Мы согласились не использовать accountDomainNameShort, а использовать его как: [email protected]. Это работает для нас обоих.






SOMEDOMAIN.local \ testuser завершится ошибкой, но [email protected] будет работать нормально. (не тестировался с Zend Framework, но работает с собственным PHP LDAP_bind ())