【发布时间】:2019-10-01 12:18:42
【问题描述】:
我通过 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进行身份验证的有效解决方案?
【问题讨论】: