Spring Security LDAP проверить пустой пароль - PullRequest
0 голосов
/ 28 апреля 2018

Я использую аутентификацию LDAP в своем приложении. Я использую этот код:

@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
    String domain = customProperties.getAdDomain();
    String url = customProperties.getAdUrl();
    ActiveDirectoryLdapAuthenticationProvider provider = new ActiveDirectoryLdapAuthenticationProvider(domain,url);
    provider.setConvertSubErrorCodesToExceptions(true);
    provider.setUseAuthenticationRequestCredentials(true);
    provider.setUserDetailsContextMapper(userDetailsContextMapper());
    auth.authenticationProvider(provider);
    auth.userDetailsService(new MyUserDetailsService());
}

Аутентификация происходит с пустым паролем. Я знаю, что мне нужно вставить проверку на пустой пароль, потому что не все серверы LDAP возвращают ошибку в этом случае. Как и где лучше вставить чек на пустой пароль?

1 Ответ

0 голосов
/ 28 апреля 2018

Вместо использования ActiveDirectoryLdapAuthenticationProvider, вы можете использовать Spring LdapTemplate, чтобы иметь собственную реализацию того, как вы аутентифицируете пользователей с помощью LdapServer. Вы можете обратиться к рекомендации здесь и здесь для настройки шаблона LDAP.

Затем вы можете создать класс CustomAuthenticationProvider для обработки аутентификации.

CustomAuthenticationProvider.class

public class CustomAuthenticationProvider implement AuthenticationProvider{

  @Autowired
  private LdapTemplate ldapTemplate;

  @Override
  public Authentication authenticate(Authentication auth) throws AuthenticationException{
    String username = auth.getName;
    String password = auth.getCredentials().toString();

    .. Your code to check whether password is blank ..

    AndFilter andFilter = new AndFilter();
    andFilter.and(new EqualFilter("<LDAP USER ATTRIBUTE>",username))
          .and(new EqualFilter("<LDAP GROUP ATTRIBUTE>","<USER GROUP>"));

    boolean isValidUser = ldapTemplate.authenticate("",andFilter.encode(),password);

    ... Your code to complete the authentication ...

{

Я предпочитаю этот подход, поскольку он дает мне более точный контроль над тем, как аутентифицировать пользователя. Вот ссылка на образец , который я реализовал ранее.

...