#ldap #openldap #spring-ldap #ldap-query #spring-security-ldap
#ldap #openldap #spring-ldap #ldap-запрос #spring-security-ldap
Вопрос:
Я пытаюсь использовать аутентификацию LDAP с помощью spring sceurity. Я следил за статьей https://spring.io/guides/gs/authenticating-ldap / для реализации. Я получаю сообщение об ошибке «[LDAP: код ошибки 50 — недостаточно прав доступа]; вложенным исключением является javax.naming.Исключение NoPermissionException: [LDAP: код ошибки 50 — недостаточно прав доступа]; оставшееся имя ‘uid = pmerla, ou = people'». Как можно устранить эту проблему? ниже приведен мой код для настройки
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().fullyAuthenticated()
.and()
.formLogin();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.ldapAuthentication()
.userDnPatterns("uid={0},ou=people")
.groupSearchBase("ou=groups")
.contextSource()
.url("ldaps://ldap.uchicago.edu/dc=uchicago,dc=edu")
.and()
.passwordCompare()
.passwordEncoder(new BCryptPasswordEncoder())
.passwordAttribute("userPassword");
}
}
Я также проверил, активно ли соединение ldap с моего терминала, используя приведенную ниже команду ldapsearch -H ldaps://ldap.uchicago.edu -D «uid = pmerla, ou = people, dc = uchicago, dc = edu» -W и он дает мне правильный ответ
# extended LDIF
#
# LDAPv3
# base <> (default) with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# search result
search: 2
result: 32 No such object
Как я могу заставить свой ldap Spring Security работать? Я также проверил другие вопросы о переполнении стека, похожие на эту проблему, но ничего не решило мою проблему.Следовательно, публикуется новый поток.Может кто-нибудь, пожалуйста, помогите мне решить эту проблему
Комментарии:
1. Наилучшей практикой для аутентификации LDAP является запрос привязки LDAP, а не поиск и сравнение паролей на стороне клиента. ПРИВЯЗКА LDAP заставляет сервер LDAP сравнивать пароль. Поскольку вы, похоже, используете анонимный поиск, я бы не ожидал, что атрибут ‘userpassword’ будет доступен для чтения.
2. У меня уже был параметр привязки userDnPatterns («uid ={0},ou= people»). это неправильно? Пожалуйста, поправьте меня, если я ошибаюсь.
3. Вот детали, которые у меня есть: Порт: 389 при использовании StartTLS, 636 с базой SSL DN: dc=uchicago, dc= edu Область применения: фильтр поддерева: (amp;(uid=<имя пользователя>)(objectclass=inetOrgPerson)) Шаблон: uid=<имя пользователя>, ou= люди, dc= uchicago, dc = edu
4.
useDnPatterns
на самом деле это тоже не лучшая практика LDAP. Лучшая практика LDAP — искать DN и не указывать его заранее, поскольку Справочное информационное дерево (DIT) может быть не таким плоским. Я думаю, мне следует сообщить об ошибке в Spring Security docs. Этот параметр не связан с аутентификацией LDAP-клиента с помощью LDAP-сервера. Если вы удалитеpasswordEncoder
BindAuthenticator
, будет использоваться буква «а». В полеcontextSource
вам необходимо указать учетные данные технической учетной записи, используемой для связи с сервером LDAP