Spring Security:ldap配置

时间:2018-10-30 13:06:28

标签: spring-security ldap

在使用Spring配置LDAP身份验证时遇到麻烦。

使用LDAP Apache Directory Studio,我与LDAP服务器具有以下工作连接:

Bind DN or USER: cn=HIDDEN_USERNAME,OU=HIDDEN_OU1,OU=HIDDEN2,OU=Admin,DC=MY_COMPANYNAME,DC=COM
Authorization ID: SASL PLAIN only
Bind Password: ******

使用此连接,我可以在根目录下找到我的帐户:

Root DSE/DC=MY_COMPANYNAME,DC=COM/OU=User Accounts/OU=Enabled Users/OU=Consultants/CN=MySurname My Name

右键单击我的帐户会给出以下值:

DN: CN=MySurname MyName,OU=Consultants,OU=Enabled Users,OU=User Accounts,DC=MY_COMPANYNAME,DC=COM
URL: ldap://IP_ADRESS:389/CN=MySurname%20MyName,OU=Consultants,OU=Enabled%20Users,OU=User%20Accounts,DC=MY_COMPANYNAME,DC=COM

我将配置 WebSecurityConfigurerAdapter 以便通过ldap服务器通过以下方式获得身份验证:

@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.ldapAuthentication()
            .userDnPatterns("CN={0},OU=Consultants,OU=Enabled Users,OU=User Accounts,DC=MY_COMPANYNAME,DC=COM")
            .contextSource()
            .url("ldap://IP_ADRESS:389/")
            .managerDn("HIDDEN_USERNAME")
            .managerPassword("*****")
            .and()
            .passwordCompare()
            .passwordEncoder(new LdapShaPasswordEncoder())
            .passwordAttribute("userPassword");
}

我试图以多种方式设置userDnPattern,但没有结果。我在做什么错了?

2 个答案:

答案 0 :(得分:0)

使用您指定的DN模式,需要使用用户ID“ MySurname MyName”进行登录尝试(并且空格可能是一个问题)。用户提供的登录ID字符串将插入到上面包括的DN模式中,并且将与

绑定
double

与您的完全合格的DN匹配的名称。如果您希望使用自己的ID而不是组成CN的姓氏/名称字符串登录,或者如果需要验证的帐户存在于多个OU位置,则userSearch可能比DN模式更可取。

如果您要针对Active Directory域进行身份验证,则可以使用{0}@domain.gTLD或DOMAIN {0}作为用户模式-提供登录ID时,这些模式形成userPrincipalName和分别为sAMAccountName。

答案 1 :(得分:0)

针对您的上述评论:Active Directory隐藏了密码字段,即使域管理员也无法读取。

我同意其他用户的意见,即对于AD,您需要使用用户搜索过滤器;如果要针对用户名使用过滤器,则应使用samaccountname={0}