Spring Security Ldap验证userDn和登录表单中的密码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Security Ldap验证userDn和登录表单中的密码相关的知识,希望对你有一定的参考价值。

我正在尝试使用WebSecurityConfigurerAdapter实现Spring Security LDAP身份验证。

到目前为止它工作正常,但我的问题是我不希望上下文的用户名和密码被硬编码。它必须是用户的登录名和密码,所以我的问题是如何从登录表单构建上下文和设置用户名和密码?

这是我正在使用的代码:

@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

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

    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth
            .ldapAuthentication()
                .userSearchFilter("(sAMAccountName={0})")
                .contextSource(contextSource());
    }

    @Bean
    public BaseLdapPathContextSource contextSource() {
        LdapContextSource bean = new LdapContextSource();
        bean.setUrl("ldap://10.10.10.10:389");
        bean.setBase("DC=myDomaine,DC=com");
        //instead of this i want to put here the username and password provided by the user
        bean.setUserDn("myDomaine\username");
        bean.setPassword("password");
        bean.setPooled(true);
        bean.setReferral("follow");
        bean.afterPropertiesSet();
        return bean;
    }
}

谢谢!

答案

你的代码应该完全正常。硬编码的用户名和密码仅用于创建与ldap服务器的绑定。登录表单中提供的用户名和密码仅使用您的代码进行身份验证。

我使用以下代码来执行ldap身份验证。

public void configure(final AuthenticationManagerBuilder auth) throws Exception {
auth.ldapAuthentication().userSearchFilter("sAMAccountName={0}").contextSource().url(this.ldapUrl).managerDn(this.managerDn)
    .managerPassword(this.managerPassword);
}

管理器是用于与服务器创建绑定的ldap帐户。

以上是关于Spring Security Ldap验证userDn和登录表单中的密码的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 spring-security-core-ldap 插件在 grails 中实现 LDAP 身份验证?

使用 Spring Security 3 进行 LDAP 身份验证

使用 Spring security 2.0.3 的 LDAP 身份验证

使用 spring security ldap 禁用基本身份验证

使用 Spring Security 配置自定义 LDAP 身份验证提供程序

使用 Spring Boot/Spring Security 对 LDAP 进行证书身份验证