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

时间:2011-02-14 13:06:33

标签: c# active-directory

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

最近我们添加了一项功能,允许用户通过系统设置自己的密码。但是,当密码策略集不接受密码时,使用SetPassword方法会引发异常。

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

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

我在this post中读到您可以从根域节点获取密码策略设置,但在哪里可以阅读有关每个属性含义的更多信息?例如,需要哪些字符来填充“复杂性”政策?

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

复杂性政策是它必须包含这些类型中的五种:

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

它也不能是sAMAccountName或displayName(或部分)。你可以阅读它here。其他密码策略规则位于adjacent documents

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