Я понимаю аутентификацию 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
?