Различная база LDAP для учетной записи службы и пользователей - PullRequest
0 голосов
/ 05 мая 2020

Я использую 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);          
    }
...