OpenLDAP仅返回密码过期的警告



我正在尝试使用OpenLDAP密码策略进行身份验证。

我已经将我的策略设置为以下内容:

dn: cn=passwordDefault,ou=Policies,dc=company,dc=com
objectClass: pwdPolicy
objectClass: person
objectClass: top
cn: passwordDefault
sn: passwordDefault
pwdAttribute: userPassword
pwdCheckQuality: 0
pwdMinAge: 0
pwdMaxAge: 7776000
pwdMinLength: 8
pwdInHistory: 5
pwdMaxFailure: 5
pwdFailureCountInterval: 600
pwdLockout: TRUE
pwdLockoutDuration: 0
pwdAllowUserChange: TRUE
pwdExpireWarning: 604800
pwdGraceAuthNLimit: 0
pwdMustChange: FALSE
pwdSafeModify: FALSE

测试策略时,如果密码已过期,我只能收到警告:

try {
        bindResult = bind(ldapConnection, userDN, userPassword);
    } catch (LDAPException le) {
        bindResult = new BindResult(le.toLDAPResult());
    }
   DraftBeheraLDAPPasswordPolicy10ResponseControl pwpResponse = DraftBeheraLDAPPasswordPolicy10ResponseControl.get(bindResult);
 DraftBeheraLDAPPasswordPolicy10WarningType warningType = pwpResponse.getWarningType();

警告类型不为 null 的唯一时间是密码被泄露时。

当帐户在 5 次尝试失败后被锁定时,LDAP 会返回"错误的凭据",但事实并非如此。

如何获取身份验证失败的正确原因?

谢谢。

当您遇到异常时,您仍然可以使用响应控件。我不知道在 Spring-LDAP 中是什么样子的,但我通过 LdapContext.getResponseControls() 在 JNDI 中完成了。响应控件应包含锁定状态。

但是,您需要小心这一点。您不希望向用户透露帐户已锁定。这将是一个初步的安全漏洞。您将向攻击者透露该帐户存在,并且进一步的即时尝试不会成功,这两者都有助于他的工作。

最新更新