Spring security 用于SpringLDAP身份验证的登录名是什么

Spring security 用于SpringLDAP身份验证的登录名是什么,spring-security,spring-boot,ldap,Spring Security,Spring Boot,Ldap,我创建了一个本地LDAP服务器,并添加了密码为“123456”的用户“djiao” 正在尝试通过Spring引导使用Spring Security实现身份验证。我的webconfig类如下所示: @Configuration @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(Htt

我创建了一个本地LDAP服务器,并添加了密码为“123456”的用户“djiao”

正在尝试通过Spring引导使用Spring Security实现身份验证。我的webconfig类如下所示:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .anyRequest()
                .authenticated()
                .and()
            .formLogin();
    }

    @Bean
    public ActiveDirectoryLdapAuthenticationProvider activeDirectoryLdapAuthenticationProvider() {
        ActiveDirectoryLdapAuthenticationProvider provider = new ActiveDirectoryLdapAuthenticationProvider("", "ldap://localhost:10389");
        provider.setConvertSubErrorCodesToExceptions(true);
        provider.setConvertSubErrorCodesToExceptions(true);
        provider.setUseAuthenticationRequestCredentials(true);
        return provider;
    }

    @Bean
    public LoggerListener loggerListener() {
        return new LoggerListener();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(activeDirectoryLdapAuthenticationProvider());
    }
但是,我似乎无法从登录页面登录

  • 如果我使用djiao(cn)或djiao1(uid),我将得到500

    [LDAP:错误代码34-给出的DN不正确:djiao1(0x64 0x6A 0x69 0x61 0x6F 0x31)无效];嵌套异常为javax.naming.InvalidNameException:[LDAP:错误代码34-给出的DN不正确:djiao1(0x64 0x6A 0x69 0x61 0x6F 0x31)无效]

  • 如果我使用dn“cn=djiao,ou=Users,dc=example,dc=com”作为用户名,我将得到“坏凭证”错误。密码只是123456


  • 登录的用户名应该是什么?或者我在websecurityconfig类中遗漏了什么吗?

    因为从您的代码中我可以识别您正在使用Spring Boot

    这就是我们连接到LDAP的工作原理

    @Configuration
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
        @Autowired
        public void configureGlobal(AuthenticationManagerBuilder authBuilder) throws Exception {
            authBuilder
                .ldapAuthentication()
                .userSearchFilter("(sAMAccountName={0})")
                .userSearchBase("dc=some,dc=domain,dc=com")
                .groupSearchBase("ou=groups,dc=some,dc=domain,dc=com")
                .groupSearchFilter("member={0}")
                .contextSource()
                    .url("ldaps://<ldap-server>")
                    .port(639)
                    .managerDn("cn=binduser,ou=users,dc=some,dc=domain,dc=com")
                    .managerPassword("some pass")
            ;
        }
    }
    

    顺便说一句:这还允许您将不同的身份验证机制(如InMemory(默认管理员后门))与LDAP和/或JDBC相结合。

    正如我所看到的,您正在使用AD连接器,该连接器正在查找名为SAMAccountName而非uid的属性。请使用“正常”选项进行检查“Ldap连接器.@daniel.eichen我是Spring Security的新手。使用普通ldap连接器需要做哪些更改?它现在可以工作了。你能看一下我的另一篇关于对机构ldap服务器进行身份验证的文章吗?
    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder authBuilder) throws Exception {
        authBuilder
            .ldapAuthentication()
            .userSearchFilter("(sAMAccountName={0})")
            .userSearchBase("dc=emea,dc=domain,dc=com")
            .groupSearchBase("ou=groups,dc=emea,dc=domain,dc=com")
            .groupSearchFilter("member={0}")
            .contextSource()
                .url("ldaps://<emea-ldap-server>")
                .port(639)
                .managerDn("cn=binduser,ou=users,dc=emea,dc=domain,dc=com")
                .managerPassword("some pass")
            .and()
            .and()
            .ldapAuthentication()
            .userSearchFilter("(sAMAccountName={0})")
            .userSearchBase("dc=ap,dc=domain,dc=com")
            .groupSearchBase("ou=groups,dc=ap,dc=domain,dc=com")
            .groupSearchFilter("member={0}")
            .contextSource()
                .url("ldaps://<ap-ldap-server>")
                .port(639)
                .managerDn("cn=binduser,ou=users,dc=ap,dc=domain,dc=com")
                .managerPassword("some pass")
    
        ;
    }