
Я прочитал довольно много информации о LDAP, но кое-чего я не понимаю.
Предположим, у меня есть приложение J2EE, которое способно как аутентифицировать локальных пользователей, так и пользователей LDAP (взаимоисключающие альтернативы). После того, как я укажу IP-адрес сервера LDAP, базовый DN, DN подключения и пароль в приложении, мои пользователи смогут войти в систему, используя свою информацию LDAP.
Теперь предположим, что "myuser" с паролем "mypassword" входит в приложение. Что из следующего происходит?
Приложение получает запрос на вход, затем привязывается к LDAP, используя свои собственные учетные данные, а затем ищет запись для «myuser» и сравнивает «mypassword» с паролем, сохраненным в каталоге LDAP для соответствующей записи, затем разрешает или отклоняет доступ.
Приложение получает запрос на вход, затем передает учетные данные «myuser» и «mypassword» в LDAP (привязывает DN и пароль), а затем, в зависимости от полученного ответа на операцию привязки, разрешает или отклоняет пользователя?
Как это на самом деле работает?
решение1
Насколько я понимаю (а я не эксперт в этих вопросах), это больше похоже на 1, чем на 2, но не совсем так. Приложение получает запрос на вход. Оно привязывается к LDAP, используя свои собственные учетные данные, пароль передается в открытом виде (вот почему LDAPS или LDAP, который эскалируется через TLS, является хорошей идеей). Эти учетные данные должны быть достаточно привилегированными, чтобы сервер LDAP мог разрешить поиск различных сохраненных параметров, относящихся к myuser
учетной записи , включая сохраненный, хешированный, пароль пользователя.
Затем приложение хэширует mypassword
, как представлено пользователем, и сравнивает его с хэшем, возвращенным из LDAP. Если они совпадают, оно знает, что представленные учетные данные верны, и myuser аутентифицирован; если нет, то нет.