我必须基于用户具有的ldap“ memberOf”属性进行身份验证。因此,我正在尝试使用ActiveDirectoryLdapAuthenticationProvider。 问题是,如果我尝试使用uid登录,则会收到 [LDAP:错误代码34-无效DN] 。当我使用完整的DN时,例如: cn =测试用户,ou = users,dc = mycompany,dc = com 我一直都有糟糕的资历。
使用ldapAuthentication这样的设置我没有问题:
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.ldapAuthentication()
.userSearchFilter("uid={0}")
.groupSearchFilter("member={0})")
.userDetailsContextMapper(userContextMapper())
.contextSource()
.url("ldap://ldap.mycompany.com:389/dc=mycompany,dc=com")
.port(389);
}
当我尝试使用authenticationProvider时的设置:
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(activeDirectoryLdapAuthenticationProvider());
}
@Bean
public AuthenticationProvider activeDirectoryLdapAuthenticationProvider() {
ActiveDirectoryLdapAuthenticationProvider provider = new ActiveDirectoryLdapAuthenticationProvider(null, "ldap://ldap.mycompany.com:389", "dc=mycompany,dc=com");
provider.setConvertSubErrorCodesToExceptions(true);
provider.setUseAuthenticationRequestCredentials(true);
return provider;
}