OpenLDAP仅返回过期密码的警告

时间:2015-01-15 11:12:48

标签: java spring openldap spring-ldap

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

我已将ppolicy设置如下:

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会返回"错误的凭据",但那不是真的。

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

感谢。

1 个答案:

答案 0 :(得分:2)

当您获得异常时,您仍然可以拥有响应控件。我不知道在Spring-LDAP中看起来像什么,但我已经通过LdapContext.getResponseControls()在JNDI中完成了它。响应控件应包含锁定状态。

但是你需要注意这一点。您不希望向用户披露该帐户已被锁定。这将是表面上的安全漏洞。您将向攻击者透露该帐户是否存在,并且进一步的立即尝试将不会成功,这两者都有助于他的工作。