C# 以编程方式生成满足Active Directory密码策略复杂性要求的随机密码
我正在尝试使用设置密码以实现忘记密码功能C# 以编程方式生成满足Active Directory密码策略复杂性要求的随机密码,c#,asp.net,regex,active-directory,directoryservices,C#,Asp.net,Regex,Active Directory,Directoryservices,我正在尝试使用设置密码以实现忘记密码功能 publicstringsetpassword(字符串用户名、字符串密码) { 字符串结果=string.Empty; PrincipalContext ctx=新PrincipalContext(ContextType.Domain); UserPrincipal user=UserPrincipal.FindByIdentity(ctx,用户名); AdUser AdUser=新AdUser(); 如果(用户!=null) { user.SetPas
publicstringsetpassword(字符串用户名、字符串密码)
{
字符串结果=string.Empty;
PrincipalContext ctx=新PrincipalContext(ContextType.Domain);
UserPrincipal user=UserPrincipal.FindByIdentity(ctx,用户名);
AdUser AdUser=新AdUser();
如果(用户!=null)
{
user.SetPassword(随机密码);
结果=“成功”;
}
返回结果;
}
我需要生成满足以下复杂性的随机密码:
- 不包含用户帐户名或用户全名中超过两个连续字符的部分
- 长度至少为六个字符
- 包含以下四个类别中三个类别的字符:
- 英文大写字符(A到Z)
- 英文小写字符(a到z)
- 以10位为基数(0到9)
- 非字母字符(例如,!、$、#、%)
string randomPassword=Membership.GeneratePassword(8,0).Replace(“”,#’);
当我试图设置密码时,它抛出错误。感谢您提供验证或内置方法来实现上述要求。我认为使用ActiveDirectoryMembershipProvider的
ResetPassword()
方法应该完全满足您的要求 我认为使用ActiveDirectoryMembershipProvider的ResetPassword()
方法应该完全满足您的要求 看看这样的东西是否适合你。我最初是为.NETIdentity 2写这篇文章的,但它应该为您指出正确的方向。你可以看到我是怎么用它的
看看这样的东西是否适合你。我最初是为.NETIdentity 2写这篇文章的,但它应该为您指出正确的方向。你可以看到我是怎么用它的
从该页面
中,由ResetPassword方法创建的随机密码不能保证传递PasswordStrengthRegularExpression属性中的正则表达式
从该页通过ResetPassword方法创建的随机密码不保证传递PasswordStrengthRegularExpression属性中的正则表达式代码>我不能在生成部分帮助你,但我可以给你一个正则表达式来验证它。你可以从每个类别中随机生成1-3个项目,然后随机混合。然后通过一个验证正则表达式运行它们,以确保。在国际海事组织,验证正则表达式更为困难。长度为6到9的将不可破解。此不包含用户帐户名或超过两个连续字符的部分用户全名
需要单独的正则表达式或进程。剩下的可以用一个正则表达式验证。我同意。请给我提供正则表达式验证。谢谢你有下面的用户验证。如果您有更快更好的验证,请告诉我。谢谢你的主意。谢谢你的帮助。bool isANameCharRepeats=Regex.Matches(uName,“(?=”)”).Cast().Select(m=>m.Groups[1].Value).Any(y=>randomPassword.IndexOf(y)!=-1);我不能在生成部分帮助你,但我可以给你一个正则表达式来验证它。你可以从每个类别中随机生成1-3个项目,然后随机混合它们。然后通过一个验证正则表达式运行它们,以确保。在国际海事组织,验证正则表达式更为困难。长度为6到9的将不可破解。此不包含用户帐户名或超过两个连续字符的部分用户全名
需要单独的正则表达式或进程。剩下的可以用一个正则表达式验证。我同意。请给我提供正则表达式验证。谢谢你有下面的用户验证。如果您有更快更好的验证,请告诉我。谢谢你的主意。谢谢你的帮助。bool isANameCharRepeats=Regex.Matches(uName,“(?=”)”).Cast().Select(m=>m.Groups[1].Value).Any(y=>randomPassword.IndexOf(y)!=-1);它不检查不包含用户帐户名或部分超过两个连续字符的用户全名验证。您完全可以为此编写逻辑。我已经编写了相同的逻辑,它似乎工作正常。感谢您的指导。它不检查不包含用户帐户名或部分用户全名超过两个连续字符的验证。您完全可以为此编写逻辑。我已经编写了相同的逻辑,它似乎工作正常。谢谢你的指导。
var validator = new PasswordValidator
{
RequiredLength = 6,
RequireNonLetterOrDigit = false,
RequireDigit = true,
RequireLowercase = true,
RequireUppercase = true
};
passwords.Add(GeneratePassword(validator));
private static string GeneratePassword(PasswordValidator passwordValidator)
{
var rnd = new Random();
while (true)
{
var password = Membership.GeneratePassword(passwordValidator.RequiredLength, 0);
if ((passwordValidator.RequireDigit && !password.Any(char.IsDigit)) || (passwordValidator.RequireLowercase && !password.Any(char.IsLower)) || (passwordValidator.RequireUppercase && !password.Any(char.IsUpper)))
continue;
if (!passwordValidator.RequireNonLetterOrDigit) password = Regex.Replace(password, @"[^a-zA-Z0-9]", m => rnd.Next(0, 10).ToString());
return password;
}
}