我是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的情况下添加登录,请提前谢谢。
答案 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");