我设置了一个启用了默认密码策略的 ApacheDS。对于测试建议,我通过多次输入错误的凭据来锁定一个简单的用户(objectClass=Person 扩展了一些自定义的 User-objectClass)。正如我所料,用户被锁定(错误消息:用户被永久锁定)。
现在的问题是:如何再次解锁用户?有没有更好的方法然后只是删除并再次添加?
我对扩展用户 (objectClass=pwdPolicy) 进行了同样的尝试,但是当用户被锁定时没有添加任何 pwd* 属性。
我设置了一个启用了默认密码策略的 ApacheDS。对于测试建议,我通过多次输入错误的凭据来锁定一个简单的用户(objectClass=Person 扩展了一些自定义的 User-objectClass)。正如我所料,用户被锁定(错误消息:用户被永久锁定)。
现在的问题是:如何再次解锁用户?有没有更好的方法然后只是删除并再次添加?
我对扩展用户 (objectClass=pwdPolicy) 进行了同样的尝试,但是当用户被锁定时没有添加任何 pwd* 属性。
最近,我在工作中遇到了同样的问题。但是,互联网上似乎没有答案。最后,我通过查看这个文档找到了答案:
LDAP 目录的密码策略 draft-behera-ldap-password-policy
此属性保存用户帐户被锁定的时间。锁定的
帐户意味着密码可能不再用于
身份验证。000001010000Z 值表示该帐户已被
永久锁定,只有密码管理员才能解锁该帐户。
此属性保存由于绑定尝试失败次数过多而无法使用密码进行身份验证的秒数。如果
此属性不存在,或者值为 0,则密码
不能用于身份验证,直到密码
管理员重置。
通过以上两部分,我们可以假设我们应该以管理员身份连接到 ApacheDS 服务器(默认情况下:uid=admin,ou=system, password=secret),并删除用户的 userPassword 属性。通过这种方式,永久锁定的用户可以被解锁。
我练习了这个 sulotion 并且效果很好。
我建议你应该为pwdLockoutDuration属性设置值,在这种情况下用户不能被永久锁定。
欲了解更多信息:
使用ApacheDS Studio并以管理员身份登录,找到用户,右键单击并选择“获取->获取操作属性”。现在 pwdAccountLockedTime 是可见的,您可以将其删除以解锁用户
先生的答案非常适合解锁帐户,如果您想pwdLockoutDuration
为单个用户设置(假设用户已经实现了 objectClass pwdPolicy
。
还有一个全局配置文件位于:
ou=config
* ads-directoryServiceId=<default>
* ou=interceptors
* ads-interceptorId=authenticationInterceptor
* ou=passwordPolicies
在这里我们可以设置默认密码策略:
由于我的只是一个测试服务器,因此我通过ads-pwdlockout
将FALSE
. 有关配置密码策略的更多信息,请阅读官方文档。
作为参考,这是您通过 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);
}