Spring安全3.1使用md5验证LDAP

时间:2013-05-14 10:35:08

标签: spring spring-security spring-ldap

当我们尝试使用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]

这里有什么问题?

2 个答案:

答案 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>