Spring boot 与LDAP通信时始终获取错误的凭据

Spring boot 与LDAP通信时始终获取错误的凭据,spring-boot,spring-security,ldap,spring-ldap,spring-security-ldap,Spring Boot,Spring Security,Ldap,Spring Ldap,Spring Security Ldap,我在与LDAP通信时收到错误的凭据 我已经设置了管理员用户(并且可以很好地登录到Windows Server 2012),并且在服务器上安装了Active Directory域服务。 我不认为我的应用程序有任何问题,因为它与.ldif文件嵌入式spring一起工作很好,我也尝试过下面的开放式服务器,它也工作得很好 我也共享DC结构,如果我从代码中传递任何错误信息,请纠正我 任何帮助都将不胜感激 配置 @Configuration public class WebSecurityConfig

我在与LDAP通信时收到错误的凭据

我已经设置了管理员用户(并且可以很好地登录到Windows Server 2012),并且在服务器上安装了Active Directory域服务。 我不认为我的应用程序有任何问题,因为它与.ldif文件嵌入式spring一起工作很好,我也尝试过下面的开放式服务器,它也工作得很好

我也共享DC结构,如果我从代码中传递任何错误信息,请纠正我

任何帮助都将不胜感激

配置

@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http)
        throws Exception {
    System.out.println(
            "WebSecurityConfig configure(HttpSecurity http)");
    http.authorizeRequests().anyRequest()
            .fullyAuthenticated().and().formLogin();
}

@Override
public void configure(AuthenticationManagerBuilder auth)
        throws Exception {
    System.out.println(
            "WebSecurityConfig configure(AuthenticationManagerBuilder auth)");
    auth.ldapAuthentication()
            .userDnPatterns("uid={0},ou=Users")
            //.groupSearchBase("ou=groups")
            .contextSource(contextSource()).passwordCompare()
            .passwordEncoder(new LdapShaPasswordEncoder())
            .passwordAttribute("userPassword");
}

@Bean
public DefaultSpringSecurityContextSource contextSource() {
    System.out.println(
            "DefaultSpringSecurityContextSource contextSource()");
    return new DefaultSpringSecurityContextSource(
            Arrays.asList("ldap://test.local:389/"),
            "dc=test,dc=local");
}

}

即使Active Directory是一种LDAP,标准LDAP支持(在SpringSecurity中)也不适用于它。相反,您应该使用专用的ActiveDirectoryLdapAuthenticationProvider:

@Bean
public ActiveDirectoryLdapAuthenticationProvider adProvider(){
返回新的ActiveDirectoryLdapAuthenticationProvider(“您的域”ldap://test.local:389/");
}
@凌驾
public void configure(AuthenticationManagerBuilder auth)引发异常{
auth.authenticationProvider(adProvider());
}

不要忘记将域更改为要登录的域。

堆栈跟踪?当你的问题是关于OpenLDAP时,你为什么要谈论active directory?我以OpenLDAP为例,但是我们的客户机有AD,我们已经创建了一些用户,但无法与AD连接。telnet是可访问的,连接正在工作。但这是一个例外