以编程方式生成满足 Active Directory 密码策略复杂性要求的随机密码
Generate Random Password which meets Active Directory Password Policy Complexity Requirements Programmatically
我正在尝试使用忘记密码功能设置密码。
public string SetPassWord(string userName, string randomPassword)
{
string result = string.Empty;
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, userName);
AdUser adUser = new AdUser();
if (user != null)
{
user.SetPassword(randomPassword);
result = "Success";
}
return result;
}
我需要生成满足以下复杂度的随机密码:
- 不包含用户的帐户名或用户全名中超过两个连续字符的部分
- 长度至少为六个字符
- 包含以下四类中的三类字符:
- 英文大写字符(A 到 Z)
- 英文小写字符(a 到 z)
- 基数 10 位数字(0 到 9)
- 非字母字符(例如,!、$、#、%)
更改或创建密码时会强制执行复杂性要求。
是否有任何内置方法可以满足上述要求?我使用以下方法随机生成密码:
string randomPassword = Membership.GeneratePassword(8, 0).Replace('<','!').Replace('>', '#');
当我尝试设置密码时出现错误。感谢是否有验证或内置方法来实现上述要求。
我认为使用 ActiveDirectoryMembershipProvider 的 ResetPassword()
方法应该完全符合您的要求。 MSDN - ActiveDirectoryMembershipProvider - ResetPassword()
看看这样的方法是否适合您。我最初是为 .Net Identity 2 写的,但它应该为您指明正确的方向。你可以在 GitHub
上看到我是如何使用它的
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;
}
}
我正在尝试使用忘记密码功能设置密码。
public string SetPassWord(string userName, string randomPassword)
{
string result = string.Empty;
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, userName);
AdUser adUser = new AdUser();
if (user != null)
{
user.SetPassword(randomPassword);
result = "Success";
}
return result;
}
我需要生成满足以下复杂度的随机密码:
- 不包含用户的帐户名或用户全名中超过两个连续字符的部分
- 长度至少为六个字符
- 包含以下四类中的三类字符:
- 英文大写字符(A 到 Z)
- 英文小写字符(a 到 z)
- 基数 10 位数字(0 到 9)
- 非字母字符(例如,!、$、#、%)
更改或创建密码时会强制执行复杂性要求。
是否有任何内置方法可以满足上述要求?我使用以下方法随机生成密码:
string randomPassword = Membership.GeneratePassword(8, 0).Replace('<','!').Replace('>', '#');
当我尝试设置密码时出现错误。感谢是否有验证或内置方法来实现上述要求。
我认为使用 ActiveDirectoryMembershipProvider 的 ResetPassword()
方法应该完全符合您的要求。 MSDN - ActiveDirectoryMembershipProvider - ResetPassword()
看看这样的方法是否适合您。我最初是为 .Net Identity 2 写的,但它应该为您指明正确的方向。你可以在 GitHub
上看到我是如何使用它的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;
}
}