当我们尝试使用spring身份验证管理器进行身份验证时,它会说“错误凭据”:
Authentication request = new UsernamePasswordAuthenticationToken("john", "johnldap");
result = authenticationManager.authenticate(request);
这里是SecurityApplicationContext.xml文件:
<authentication-manager alias="authenticationManager">
<ldap-authentication-provider server-ref="ldapLocal"
user-dn-pattern="uid={0},ou=People,dc=example,dc=com">
</ldap-authentication-provider>
</authentication-manager>
<ldap-server url="ldap://127.0.0.1:389/dc=example,dc=com" manager-dn="admin" manager-password="xxxxxxxx" id="ldapLocal" />
但是使用“ldapsearch”我们可以成功连接:
ldapsearch -D "uid=john,ou=People,dc=example,dc=com" -w johnldap -L "objectClass=*"
我们第一次认为问题是我们要在调用LDAP之前告诉spring执行密码的md5。所以我们将它添加到applicationSecurtyContext.xml:
<beans:bean id="passwordEncoder" class="org.springframework.security.authentication.encoding.Md5PasswordEncoder">
</beans:bean>
<authentication-manager alias="authenticationManager">
<ldap-authentication-provider server-ref="ldapLocal"
user-dn-pattern="uid={0},ou=People,dc=example,dc=com">
<password-compare>
<password-encoder ref="passwordEncoder"> </password-encoder>
</password-compare>
</ldap-authentication-provider>
</authentication-manager>
<ldap-server url="ldap://127.0.0.1:389/dc=example,dc=com" manager-dn="admin" manager-password="xxxxxxxx" id="ldapLocal" />
但是当我们添加标签时,它说:
LDAP: error code 34 - invalid DN]
这里有什么问题?
答案 0 :(得分:1)
如果我没记错,user-dn-pattern
不应包含根dn,因为它会自动附加。所以尝试使用:
user-dn-pattern="uid={0},ou=People">
如果您只想进行简单的绑定身份验证,我认为您不需要password-encoder
。
答案 1 :(得分:0)
我花了很多时间尝试连接spring security,看看stackoverflow我也认为它可能是编码问题,因为密码是md5,虽然我不得不分别添加上面提到的root dn < / b>,密码由ldap服务器编码。以下是我的工作版本:
<ldap-server url="ldap://dsa.company.com:389/" manager-dn="cn=manager,dc=company,dc=com"
manager-password="pass"></ldap-server>
<authentication-manager>
<ldap-authentication-provider
user-dn-pattern="cn={0},ou=people,dc=company,dc=com"
group-search-base="ou=groups,dc=company,dc=com" />
</authentication-manager>