没有UID的SpringBoot + Spring Security + LDAP登录

时间:2018-03-19 09:39:26

标签: spring-boot spring-security ldap spring-ldap

我是LDAP的新手,我正在尝试弄清楚如何使用ldap进行spring安全性登录。我读过的所有示例/指南/教程都使用UID作为登录表单。我没有UID。

这是结构: LDAP structure

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends  WebSecurityConfigurerAdapter {

 @Override
 protected void configure(HttpSecurity http) throws Exception {

http.authorizeRequests().anyRequest().fullyAuthenticated().and().formLogin();
}

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.ldapAuthentication()
            .userDnPatterns("mail={0},ou=group")
            .groupSearchBase("ou=group")
            .contextSource()
            .url("ldap://localhost:8389/dc=ad,dc=company,dc=com")
            .and()
            .passwordCompare()
            .passwordEncoder(new LdapShaPasswordEncoder())
            .passwordAttribute("userPassword");

}

这里我尝试用MAIL替换UID,但它不起作用。 错误:

Reason: Uncategorized exception occured during LDAP processing; nested exception is javax.naming.NamingException: [LDAP: error code 1 - 000004DC: LdapErr: DSID-0C0907C2, comment: In order to perform this operation a successful bind must be completed on the connection., data 0, v2580]; remaining name 'mail=erik.zs@mail.com, '

我希望有人知道如何在没有UID的情况下添加登录,请提前谢谢。

1 个答案:

答案 0 :(得分:1)

将其写入答案,因为它现在涉及代码块,而这些不适用于评论。

正如上面评论中所讨论的,您的问题是Spring使用LdapTemplate进行LDAP访问,该访问使用LDAP搜索进行所有身份验证调用。搜索LDAP 通常需要一个管理员帐户,Spring LDAP类称为managerDn。通常在创建LDAP上下文源时设置此managerDN。在您的情况下,设置它的方法由contextSource()构建器提供,设置如下:

auth.ldapAuthentication()
        .userDnPatterns("mail={0},ou=group")
        .groupSearchBase("ou=group")
        .contextSource()

        .managerDN("your admin account's Distinguished Name (DN)")
        .managerPassword("password associated with your admin account")

        .url("ldap://localhost:8389/dc=ad,dc=company,dc=com")
        .and()
        .passwordCompare()
        .passwordEncoder(new LdapShaPasswordEncoder())
        .passwordAttribute("userPassword");