以编程方式生成满足 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;
}

我需要生成满足以下复杂度的随机密码:

更改或创建密码时会强制执行复杂性要求。

是否有任何内置方法可以满足上述要求?我使用以下方法随机生成密码:

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;
    }
}