1

Здравствуйте, у меня возникла проблема с созданием простого входа с Ldap. Я загрузил начатый проект с сайта spring.io: link Он отлично работает с файлом ldif, но я хочу заменить его на работающий ldap-сервер. Я пробовал его в течение нескольких дней без каких-либо успехов. Я получаю лучшие результаты с этим куском кода (заменен в WebSecurityConfig из Getting Started проекта)Spring boot ldap security

@Configuration 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.authorizeRequests().anyRequest().authenticated().and().httpBasic(); 
    } 

    @Override 
    protected void configure(AuthenticationManagerBuilder authManagerBuilder) throws Exception { 
     authManagerBuilder.authenticationProvider(activeDirectoryLdapAuthenticationProvider()).userDetailsService(userDetailsService()); 
    } 

    @Bean 
    public AuthenticationManager authenticationManager() { 
     return new ProviderManager(Arrays.asList(activeDirectoryLdapAuthenticationProvider())); 
    } 
    @Bean 
    public AuthenticationProvider activeDirectoryLdapAuthenticationProvider() { 
     ActiveDirectoryLdapAuthenticationProvider provider = new ActiveDirectoryLdapAuthenticationProvider(null, "ldap://ip:port/", "ou=GROUP,dc=domain,dc=com"); 
     provider.setConvertSubErrorCodesToExceptions(true); 
     provider.setUseAuthenticationRequestCredentials(true); 

     return provider; 
    } 
} 

Если я пытаюсь войти в систему с хорошим именем и паролем в формате «имя пользователя» «пароль» консоли вывода: ActiveDirectoryLdapAuthenticationProvider: Active Directory не удалось выполнить аутентификацию: пароль недействителен

Если я использую «[email protected]» и хороший пароль, страница просто перезагружается без вывода на консоль.

Если я использую случайное имя пользователя и пароль: консоль аутентификации каталогов не Активный: Поставлено пароль был недействителен

Может кто-то помочь?

+0

Как вы использовали «нулевой» для домена в конструкторе ActiveDirectoryLdapAuthenticationProvider, вы должны использовать «UserPrincipalName» ([email protected]) для аутентификации Вы можете включить ведение журнала, чтобы выяснить, почему это не работает или если вы не используете расширенную работу LDAPS или StartTLS, трассировка сети точно сообщит, если запрос LDAP BIND преуспел –

ответ

0

Как было предложено в комментарии, я включил ведение журнала и выяснил, что проблема аналогична с «[email protected]».

Проблема была в aciveDirectoryLdapAuthenticationProvider() в ней было 3 проблемы.

  1. Я удалил группу OU из rootDn и добавил домен поэтому мы можем использовать только имя пользователя, чтобы войти.

    ActiveDirectoryLdapAuthenticationProvider provider = new ActiveDirectoryLdapAuthenticationProvider("domain.com", "ldap://ip:port/", "dc=domain,dc=com"); 
    
  2. измененная searchfilter поставщика

    provider.setSearchFilter("(&(objectClass=user)(sAMAccountName={0}))"); 
    
  3. и, наконец, должен был изменить метод ActiveDirectoryLdapAuthProvider searchForUser, поскольку он соответствовал «[email protected]» с sAMAccountName istead из «username». Это:

    return SpringSecurityLdapTemplate.searchForSingleEntryInternal(context, 
           searchControls, searchRoot, searchFilter, 
           new Object[] { bindPrincipal });  
    

    заменен следующим образом:

    return SpringSecurityLdapTemplate.searchForSingleEntryInternal(context, 
          searchControls, searchRoot, searchFilter, 
          new Object[] { username }); 
    

Полная aciveDirectoryLdapAuthenticationProvider():

@Bean 
    public AuthenticationProvider activeDirectoryLdapAuthenticationProvider() { 
     ActiveDirectoryLdapAuthenticationProvider provider = new ActiveDirectoryLdapAuthenticationProvider("domain.com", "ldap://ip:port/", "dc=domain,dc=com"); 
     provider.setSearchFilter("(&(objectClass=user)(sAMAccountName={0}))"); 
     provider.setConvertSubErrorCodesToExceptions(true); 
     provider.setUseAuthenticationRequestCredentials(true); 
     return provider; 
    } 

Может кто-то обеспечить лучшее решение для второй/третьей задачи? возможно, лучший поисковый фильтр? У меня нет поля в ldap, которое соответствует формату bind_incapal, который использует метод «[email protected]», который использует ActiveDirectoryLdapAuthProvider.

+0

Привет @ user3551808, можете ли вы рассказать мне, как и где вы включили ведение журнала? У меня есть аналогичные ошибки, и я хочу видеть больше протоколирования, но, похоже, это не происходит, я использую logback.xml, и я просто сделал эту запись в начале logback.xml: 'debug = "true", но это казалось, не помогли. –

Смежные вопросы