PHP + LDAP аутентификация (не авторизация)

TssDragon

Новичок
Доброго времени суток, господа

Ситуация:
На сайте есть авторизация, которая возможна как по внутренней базе пользователей (firebird, но это не важно для данной задачи), так и через ldap.
Алгоритм такой:
получаем из базы конфиги для ldap сервера(-ов) и пробуем авторизовать пользователя по введенным данным через ldap, если успешно, то проверяем наличие пользователя в нашей внутренней базе и, если его нет, то регистрируем его, получая дополнительную информацию с ldap сервера (имя, фамилия и так далее), если уже есть в базе, то просто пропускаем дальше. Если пользователь с таким логин/пароль не найден в ldap, происходит попытка авторизации через внутреннюю базу, если успешно, то пускаем дальше.
Общем, авторизация в таком виде работает шикарно и успешно :)
И все бы хорошо, но возникла задача аутентификации.
То есть, теперь необходимо на форме входа сначала вводить только логин и проверять его наличие как во внутренней базе (элементарно, уже сделано) так и в ldap. Если логин где-то есть, то просим пароль и авторизуем, если нигде нет, то предлагаем регистрацию.

Собственно проблема:
Как мне проверить наличие пользователя в ldap, без ввода пароля ?
Читал, что при попытке ldap_bind без пароля, но с корректным логином bind будет успешен (анонимное соединение) и шикарно бы было, но пробую сделать:
$bind = @ldap_bind($ldapConnect->getLdapConnect(), $ldapLogin, null);
или
$bind = @ldap_bind($ldapConnect->getLdapConnect(), $ldapLogin);
и у меня в любом случае бинд проходит, не важно корректный логин или не корректный.
Пробую биндить без логина и пароля, после чего сделать ldap_search
$result= ldap_search($ldapConnect->getLdapConnect(), $ldapConnect->getBase(), "(" . $ldapConnect->getFilter() . $login . "*)"); - так работает при простой авторизации для получения данных о пользователе
Но выкидывает
Warning: ldap_read(): Search: Operations error in D:\TssDragon\RegKod\Apache24\domain\RegKod\auth\Auth.php on line 113
И, собственно говоря, ничего не ищет :(

Прощу помощи
 

AnrDaemon

Продвинутый новичок
Не все LDAP сервера позволяют анонимное чтение.
Нужен отдельный пользователь для вашего приложения, достаточно только прав на чтение.
 

TssDragon

Новичок
Не все LDAP сервера позволяют анонимное чтение.
Нужен отдельный пользователь для вашего приложения, достаточно только прав на чтение.
Вот только хотел спросить по поводу отдельного пользователя, да :)
Правильно ли я понимаю, что если запрещено анонимное соединение, то моя задача решается только через создание отдельного пользователя, от имени которого надо выполнять поиск в ldap ?
 

AnrDaemon

Продвинутый новичок
Да. Желательно, чтобы этот пользователь больше нигде не использоваться.
 

MiksIr

miksir@home:~$
аутентификация - проверка логина и пароля
авторизация - проверка возможности того или иного действия для пользователя (аутентифицированного как правило)
 

TssDragon

Новичок
Да. Желательно, чтобы этот пользователь больше нигде не использоваться.
Спасибо за ответ :) С проблемой разобрался. Тему можно закрывать.
аутентификация - проверка логина и пароля
авторизация - проверка возможности того или иного действия для пользователя (аутентифицированного как правило)
Да, признаю, не совсем корректно использовал слова :( Спасибо за исправление, впредь буду внимательнее
 

MiksIr

miksir@home:~$
Если делаете под конкретный сервер и сойдут костыли - можно попробовать с фектовым паролем и посмотреть - различаются ли ошибки для "нет юзера" и "неверный пароль". Хотя, конечно, отдельный юзер с поиском - правильнее.
 
Сверху