我一直在使用System.DirectoryService
(ADSI)类和方法来创建和更改Active Directory中的用户。
最近我们添加了一项功能,允许用户通过系统设置自己的密码。但是,当密码策略集不接受密码时,使用SetPassword
方法会引发异常。
userEntry.Invoke("SetPassword", new object[] {password});
我的问题是:在尝试使用SetPassword方法之前,如何检查密码是否符合密码策略?
我在this post中读到您可以从根域节点获取密码策略设置,但在哪里可以阅读有关每个属性含义的更多信息?例如,需要哪些字符来填充“复杂性”政策?
一旦我知道这一点,我就可以实现自己的密码检查方法,但由于这是一种容易出错的方法,我宁愿使用内置检查并向用户提供有关其密码错误的适当信息
答案 0 :(得分:2)
我正在为我的工作做一个类似的项目。我们正在滚动忘记密码的应用程序。我最后只是做Invoke("SetPassword", "[randomString]")
并保存了Invoke("ChangePassword","[randomString]","[user supplied pw]")
的随机字符串。 ChangePassword
的结果已返回给用户。
SetPassword不会检查密码复杂性或历史记录规则。与在AD中右键单击用户并选择“重置密码”相同。但是,ChangePassword
会检查密码历史记录要求。
答案 1 :(得分:0)
复杂性政策是它必须包含这些类型中的五种:
它也不能是sAMAccountName或displayName(或部分)。你可以阅读它here。其他密码策略规则位于adjacent documents。
您可以尝试设置它并捕获异常,但是从内存中我不认为它会告诉您密码有什么问题,只是它不符合要求。