我设置了启用了默认密码策略的ApacheDS。对于测试建议我通过输入错误的凭证多次锁定一个简单的User(objectClass =使用某个自定义User-objectClass扩展的Person)。正如我所料,用户已被锁定(错误消息:用户被永久锁定)。
现在的问题是:如何再次解锁用户?有没有更好的方法,然后再删除并添加?
我尝试使用扩展用户(objectClass = pwdPolicy),但在用户被锁定时没有添加pwd *属性。
答案 0 :(得分:7)
最近,我在工作中遇到了同样的问题。但是,似乎互联网上没有答案。最后,我通过查看此文档找到了答案:
Password Policy for LDAP Directories draft-behera-ldap-password-policy
此属性包含用户帐户被锁定的时间。一个
锁定帐户意味着密码可能不再用于
认证。 000001010000Z值表示该帐户已为
永久锁定, 只有密码管理员可以解锁 帐户 。
此属性保存密码不能的秒数 由于太多的失败绑定尝试,用于进行身份验证。如果
此属性不存在,或 如果值为0,则为密码
在通过密码重置之前不能用于验证 管理员 强>
通过以上两节,我们可以假设我们应该与管理员连接到ApacheDS服务器(默认情况下:uid = admin,ou = system,password = secret),并删除用户的userPassword属性。通过这种方式,永久锁定的用户可以解锁。
我练习了这种闷热,效果很好。
我建议您为 pwdLockoutDuration 属性设置值,在这种情况下,用户无法永久锁定。
了解更多信息:
答案 1 :(得分:4)
使用ApacheDS并以管理员身份登录,找到用户,右键单击并选择" Fetch->获取操作属性"。现在pwdAccountLockedTime可见,您可以将其删除以解锁用户
答案 2 :(得分:2)
Mister's的答案非常适合解锁帐户,如果您想为单个用户设置pwdLockoutDuration
(假设用户已经实现了objectClass pwdPolicy
。
还有一个全局配置文件:
ou=config
* ads-directoryServiceId=<default>
* ou=interceptors
* ads-interceptorId=authenticationInterceptor
* ou=passwordPolicies
我们可以在此设置默认密码策略:
由于我的只是一个测试服务器,因此我已将ads-pwdlockout
设置为FALSE
,从而完全禁用了锁定功能。有关配置密码策略的更多信息,请阅读official docs。
答案 3 :(得分:0)
作为参考,这是通过java在服务器上启用它的方式:
AuthenticationInterceptor authenticationInterceptor = new AuthenticationInterceptor();
PasswordPolicyConfiguration config = new PasswordPolicyConfiguration();
config.setPwdLockout(true);
authenticationInterceptor.setPwdPolicies(config);
然后可以编写客户端方法,以启用/禁用特定帐户,类似于:
public void disableUser(String dn) throws LdapException, UnsupportedEncodingException
{
Modification disablePassword = new DefaultModification(
ModificationOperation.REPLACE_ATTRIBUTE, "pwdAccountLockedTime","000001010000Z" );
connection.modify(dn,disablePassword);
}
public void enableUser(String dn) throws LdapException, UnsupportedEncodingException
{
Modification disablePassword = new DefaultModification(ModificationOperation.REMOVE_ATTRIBUTE, "pwdAccountLockedTime");
connection.modify(dn,disablePassword);
}