Spring-LDAP - 密码比较如何更新失败的密码尝试

Spring-LDAP - Password Compare How-to Update Failed Password Attempts

使用 ApacheDS 2.0.0,配置的相关部分是:

dn: ads-pwdId=default,ou=passwordPolicies,ads-interceptorId=authenticationInterceptor,ou=interceptors,ads-directoryServiceId=default,ou=config
ads-pwdminlength: 5
ads-pwdinhistory: 5
ads-pwdid: default
ads-pwdcheckquality: 1
ads-pwdlockout: TRUE
ads-pwdlockoutduration: 0
ads-pwdvalidator: org.apache.directory.server.core.api.authn.ppolicy.DefaultPasswordValidator
ads-pwdmaxfailure: 5
ads-pwdattribute: userPassword
ads-pwdfailurecountinterval: 30
entryParentId: 0889249e-fc0d-44ec-9df6-af21e46b3dac
ads-enabled: TRUE
objectclass: ads-passwordPolicy
objectclass: ads-base
objectclass: top
entryuuid: 22d39b05-7219-471f-9ca5-a9b12aff7a9e
ads-pwdgraceauthnlimit: 5
modifytimestamp: 20150409194653.529Z
entrycsn: 20150409194653.530000Z#000000#001#000000
ads-pwdexpirewarning: 600
modifiersname: 0.9.2342.19200300.100.1.1=admin,2.5.4.11=system

然后在 Spring-LDAP 3.2.5 / Security 中,我使用以下身份验证管理器配置:

<authentication-manager alias="authenticationManager">
    <ldap-authentication-provider
        user-context-mapper-ref="detailsMapper"
        user-dn-pattern="uid={0},ou=people" user-search-filter="(uid={0})"
        group-search-base="ou=groups" group-search-filter="member={0}">
        <password-compare />
    </ldap-authentication-provider>
</authentication-manager>

我可能误解了 "password-compare" 周围的边界,但是当我删除该元素时,LDAP 似乎保持 "pwdFailureTime" 密码失败。 "password-compare" 元素丢失,因此帐户不会因多次密码失败而被锁定。

对我在这里遗漏的内容有什么想法吗?

当您使用 password-compare 时,您不会以用户身份使用他的密码绑定到 LDAP,因为应该使用 LDAP,因此 LDAP 永远不会看到失败的登录尝试。

相反,Spring 从用户条目中提取密码,充当 LDAP 管理员,并比较密码本身。

你不应该使用这个选项。有悖于LDAP的设计初衷。