Я использую Spring Security LDAP 5.0.3 в веб-приложении, защищенном Spring Security.
Моя учетная запись службы для выполнения привязки и поиска в Active Directory:
url: ldap://dc1.companyname.lan/
port: 389
base: CN=service_dev,OU=Service%20Users,DC=companyname,DC=lan
, но мне нужно выполнить вход в систему с обычными пользователями, хранящимися в другом базовом пути LDAP:
cn=Users,DC=companyname,DC=lan
Я не знаю, как правильно настроить моего провайдера аутентификации, потому что я получаю такую ошибку :
javax.naming.NameNotFoundException: [LDAP: error code 32 - 0000208D: NameErr: DSID-031001E4, problem 2001 (NO_OBJECT)
когда я ввожу свое имя пользователя и пароль в форме входа в мое приложение.
это мой код:
auth.ldapAuthentication()
.rolePrefix("")
.userDetailsContextMapper(userDetailsContextMapper())
.userSearchFilter("(sAMAccountName={0})")
.userSearchBase("cn=Users,DC=companyname,DC=lan")
.contextSource()
.url("ldap://dc1.companyname.lan/CN=service_dev,OU=Service%20Users,DC=companyname,DC=lan").port(389)
.managerDn(companyname\\service_dev)
.managerPassword(servicepass);
Я должен указать это проблема возникает, когда я использую учетную запись службы «service_dev» на другой основе, чем обычные «пользователи», как Вы можете видеть.
На самом деле приведенный ниже код работает нормально (я использую себя в качестве учетной записи службы)
auth.ldapAuthentication()
.rolePrefix("")
.userDetailsContextMapper(userDetailsContextMapper())
.userSearchFilter("(sAMAccountName={0})")
.contextSource()
.url("ldap://dc1.companyname.lan/cn=Users,DC=companyname,DC=lan").port(389)
.managerDn(companyname\\myname)
.managerPassword(mypass);
Спасибо.
[РЕШЕНИЕ]
После нескольких попыток я нашел решение для конфигурации моего поставщика аутентификации. Я размещаю приведенный ниже код на случай, если он может быть полезен кому-то другому
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.ldapAuthentication()
.rolePrefix("")
.userDetailsContextMapper(userDetailsContextMapper())
.userSearchFilter("(sAMAccountName={0})")
.userDnPatterns("CN=service_dev,OU=Service%20Users","cn=Users")
.contextSource()
.url("ldap://dc1.companyname.lan/cn=Users,DC=companyname,DC=lan").port(389)
.managerDn("companyname\\service_dev")
.managerPassword(servicepass);
}