以编程方式确定AD密码策略

我一直在使用System.DirectoryService (ADSI)类和方法来创建和更改Active Directory中的用户。

最近我们添加了一项function,允许用户通过系统设置自己的密码。 但是,如果密码策略集未接受密码,则使用SetPassword方法会引发exception。

 userEntry.Invoke("SetPassword", new object[] {password}); 

我的问题是:在尝试使用SetPassword方法之前,如何检查密码是否符合密码策略?

我在这篇文章中读到你可以从根域节点获取密码策略设置,但是在哪里可以阅读更多关于每个属性的含义? 例如,需要哪些字符来填充“复杂性”政策?

一旦我知道这一点,我就可以实现自己的密码检查方法,但由于这是一种容易出错的方法,我宁愿使用内置检查,并向用户提供有关其密码错误的适当信息。

我在工作中正在做一个类似的项目。 我们正在滚动忘记密码的应用程序。 我最后只做了一个Invoke("SetPassword", "[randomString]")并保存了Invoke("ChangePassword","[randomString]","[user supplied pw]")的随机字符串Invoke("ChangePassword","[randomString]","[user supplied pw]")ChangePassword的结果已返回给用户。

SetPassword不检查密码复杂性或历史规则。 与在AD中右键单击用户并选择“重置密码”相同。 但是, ChangePassword会检查密码历史记录要求。

复杂性政策是它必须包含以下五种类型中的三种:

  • 大写字母
  • 小写字母
  • 数字
  • 非字母数字字符:〜!@#$%^&* _- + =`|(){} []:;“’<>,。?/
  • Unicode字符,字母但不是大写或小写。

它也不能是sAMAccountName或displayName(或部分)。 你可以在这里阅读它。 其他密码策略规则位于相邻文档中 。

您可以尝试设置它并捕获exception,但是从内存中我不认为它会告诉您密码有什么问题,只是它不符合要求。