В Spring есть реализация авторизация по LDAP. В нашем конкретном случае, это происходит через 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
?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть база данных sql, в ней есть две таблицы, при вводе команды use user, выводится фраза Database changedОднако при выполнении такой же последовательности...
Нужно чтобы переменная value приняла форматированное значение переменной Toast_otv
Передо мной оказалась такая задача: перевести работающий проект с gradle на maven (ну так уж захотелось заказчику)У меня с этим возникли определенные...