我正在尝试使用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();
警告类型唯一不为空的时间是在密码被导出时。
当帐户在5次尝试失败后被锁定时,ldap返回“坏凭证”,但事实并非如此。
如何获得身份验证失败的正确原因?
谢谢。
1条答案
按热度按时间mpgws1up1#
当您得到异常时,仍然可以使用响应控件。我不知道在springldap中是什么样子,但我已经通过jndi完成了
LdapContext.getResponseControls()
. 响应控件应包含锁定状态。但是你要小心。您不想向用户透露帐户已锁定。这将是一个初步的安全漏洞。您将向攻击者披露该帐户存在,并且进一步的立即尝试将不会成功,这两种尝试都有助于他的工作。