我正在使用Java Ldaptive库通过LDAP协议与Active Directory通信。我的问题如下:我需要具有密码重置功能,尊重密码历史记录和复杂性要求,但忽略了最小密码年龄规则。我使用Admin帐户执行密码重置:
modifyRequest = new ModifyRequest(userLdapEntry.getDn(),
new AttributeModification(
AttributeModificationType.REPLACE,
new UnicodePwdAttribute(password)));
modifyRequest.setControls(new LdapPolicyHintsControl(getADPolicyHintsEnforceFlag(), false));
new ModifyOperation(connection).execute(modifyRequest);
在Microsoft网站上记录了添加的控件作为控制密码历史要求链接
但是,如本答案所建议的那样,它也执行最低密码年龄规则,这是针对文档的。
任何想法如何使其如文档中所述工作?
文档是错误的。您将无法这样工作。最低密码年龄规则将受到尊重,您不能通过代码覆盖它。
请注意,在Active Directory中,与典型的LDAP服务器不同,它不会像您认为那样执行密码策略。密码策略由组策略管理,并在Windows中执行,尤其是Windows lsass.exe进程。
由于您通过组策略配置密码策略。这些设置直接写给域控制器上的安全架。这是LSAS从中读取它们的地方。这些设置唯一被覆盖的是直接从ADUC更改密码时。
广告工具以外,您必须编写一个密码过滤器.dll,该ever .dll在LSASS过程中运行:
自定义密码过滤器https://blogs.technet.microsoft.com/tristank/2005/07/18/custom-password-filters/
密码过滤器https://msdn.microsoft.com/en-us/library/windows/desktop/ms721882(v = vs.85(.aspx
当我提出这个问题时,Microsoft PSS现场工程师给了我这些信息。