LDAP + Spring: как правильно аутентифицироваться? - PullRequest
0 голосов
/ 01 октября 2019

Я понимаю аутентификацию LDAP от Spring. В моем случае я использую ActiveDirectoryLdapAuthenticationProvider.

Это выглядит здесь:

    private Authentication authenticate(String username, String password, HelpDescUser userDetails) {
    String url = "ldap://" + ldapHost + ":" + port + "/";
    ActiveDirectoryLdapAuthenticationProvider ldapProvider =
            new ActiveDirectoryLdapAuthenticationProvider(domain, url, rootDn);
    String filterWithName = String.format(filter, username);
    ldapProvider.setSearchFilter(filterWithName);
    ldapProvider.setContextEnvironmentProperties(createProperties(username, password));
    ldapProvider.setConvertSubErrorCodesToExceptions(true);
    UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(username, password);

    Authentication authenticate;
    try {
        authenticate = ldapProvider.authenticate(authentication);
    } catch (Exception e) {
        throw new BadCredentialsException("Пользователь не авторизован (сервер LDAP не подтвердил авторизацию).");
    }
    if (Objects.nonNull(authenticate) && authenticate.isAuthenticated()) {
        return new UsernamePasswordAuthenticationToken(userDetails, password, userDetails.getAuthorities());
    } else {
        throw new BadCredentialsException("Пользователь не авторизован (сервер LDAP не подтвердил авторизацию).");
    }
}


private Map<String, Object> createProperties(String username, String password) {
        Map<String, Object> properties = new HashMap<>();
        properties.put(Context.SECURITY_PRINCIPAL, username);
        properties.put(Context.SECURITY_CREDENTIALS, password);
        return properties;
}

У меня проблема.

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

Пожалуйста, покажите мне рабочее решение для аутентификации с помощью Spring ActiveDirectoryLdapAuthenticationProvider?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...