我想允许当前用户更改其密码(通过活动目录管理)。
我想验证然后在Active Directory中设置密码(目前使用SetPassword invoke method)。
我的问题是验证密码以满足复杂性要求:
不包含用户的帐户名称或 用户的全名部分 超过两个连续的字符Be 至少六个字符的长度 包含三个中的字符 以下四类:英语 大写字符(A到Z) 英文小写字母(a 通过z)基数10位数(0到 9)非字母字符(for 例如,!,$,#,%)复杂性 要求在执行时强制执行 密码被更改或创建。
我已经在使用带有两个文本框的CompareValidator
,所以我在考虑添加RegularExpressionValidator
(source 1,source 2),但我不知道如何让它与整个“四类中的三个”事物一起工作:
RegularExpressionValidator revComplex = new RegularExpressionValidator();
revComplex.ControlToValidate = _txtPassword1.ID;
revComplex.ErrorMessage = "Password must have at least 7 characters. Characters should be from at least three of the following four groups: uppercase letter, lowercase letter, digit, or special characters (for example, !, $, #, %).";
revComplex.ValidationExpression = @"^(?=.{7,})(?=.*[a-z])(?=.*[0-9])(?=.*[A-Z])(?!.*s).*$";
当然有人试图这样做过吗?在根据本地安全策略将用户密码发送到Active Directory之前,如何验证用户的密码?
答案 0 :(得分:2)
Imho,你可以比SetPassword更好地使用ChangePassword。这样,您需要用户指定其当前(旧)密码。这可能很有趣,因为您永远无法100%确定浏览您网站的用户实际上是登录的用户。
这是一个包含更多信息的链接: http://www.primaryobjects.com/CMS/Article66.aspx
您无需提前验证密码。只需在try-catch中将其发送到AD,如果未经验证,则原因将在异常消息中。
答案 1 :(得分:1)
我找到了一种更详细地诊断错误的方法。它没有提供来自AD的任何反馈,但我们可以创建COM错误到用户友好消息的映射。
本文提供了有关处理可能的COM错误的更多信息:
http://www.ozkary.com/2015/03/active-directory-setpassword-or.html
我认为可以为这些COM错误添加更多细节:
0x800708c5 0x8007202f 0x8007052d 0x8007052f