以编程方式确定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,但是从内存中我不认为它会告诉您密码有什么问题,只是它不符合要求。
- 是否有更好(更简单)的方法来获取特定域的SID?
- 从WindowsIdentity和Thread.CurrentPrincipal检索WindowsPrincipal有什么区别?
- 在全局编录中validation用户
- 使用Novell.Directory.Ldap.NETStandard库进行C#netcore ldap身份validation
- 如何查找当前用户具有WriteProperty访问权限的ActiveDirectory中的所有组?
- UserPrincipals.GetAuthorizationGroups枚举组时发生错误(1301)。 该组的SID无法解决
- 我如何在.NET中处理Negotiate?
- GroupPrincipal方法FindByIdentity抛出奇怪的exception
- 使用PrincipalContext.ValidateCredentials对本地计算机进行身份validation时出错?