PDA

Просмотр полной версии : Invalid credentials идентификация пользователя на PHP


Dagas
27.09.2007, 15:32
Вкратце обстановка:
есть сервер Win2K на котором есть AD организации. Там поднято более 2х тысяч пользователей, и на этом всем завязана куча программного обеспечения (это что бы потом не говорили, типа "да ставьте *nix и не парьтесь!"). Есть сайт организации, поднят на FreeBSD.
Задача: создать страницу, с идентификацией пользователей из AD.
Поставлен PHP5 под него включен модуль php-ldap.

if(!isset($_SERVER['PHP_AUTH_USER']))
{
header("WWW...");
header("HTTP/1.0 ...");
exit;
}

получаю $_SERVER['PHP_AUTH_USER'] $_SERVER['PHP_AUTH_PW'] - логин и пароль, под которыми пользователь хочет зайти на страничку. Теперь этого пользователя надо аутентифицировать. Для этого есть тестовый пользователь, под которым я захожу в AD используя ldap_connect(...), ldap_bind(...). Делаю поиск по AD, вычленяю пользователя используя найденный атрибут $info[$i]["samaccountname"][0], который сравниваю с $_SERVER['PHP_AUTH_USER']. Сравнение проходит успешно, получаю DN пользователя. А вот тут начинается мистика. Дело в том, что пользователи AD занесены с использованием кириллицы. Получается DN примерно такого вида: CN=ФИО,OU=Центр информационных технологий,OU=Сотрудники,DC=host,DC=com Из AD это значение, хранящееся в $info[$i]["dn"] приходит в кодировке UTF-8 (в которой я должен их вбивать назад в AD). Следующим шагом должна стать проверка введенной пользователем пары логин/пароль. Логин уже проверен (найден DN этого логина в базе), а пароль пока еще и пальцем никто не трогал. Делаю
$login_user=$info[$i]["dn"];
...
ldap_unbind(...);
ldap_connect(...);
ldap_bind($ds,$login_user,$_SERVER['PHP_AUTH_PW']);
...
и получаю ошибку Invalid credentials. Если делаю вход под именем тестового пользователя - повторный биндинг проходит, т.е. код написан верно? Пароль правильный 100%. Данные про пользователя, выведенные по ldap_search(...) тоже полностью совпадают с данными AD.
В чем может быть проблема?

EvroStandart
27.09.2007, 15:41
php-ldap я не использовал. В общем, там остаётся только выписывать значения переменных из разных мест. Дальше сравнивать и думать. Если будет ясно что именно и в каком месте теряется - можно искать решение.

Hubbitus
10.10.2007, 11:27
http://www.opennet.ru/tips/info/1466.shtml может это поможет в вопросе аутентификации в виндовом домене?