ASP.NET 身份,需要"强"密码



也许今天早上我的谷歌搜索技能不是那么好,但我似乎找不到如何使用个人用户帐户使用新的 asp.net mvc5 项目设置不同的密码要求(而不是最小/最大长度)。

[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }

我还不知道我想做什么密码要求,但可能是最小长度的组合,需要一个小写字母,大写字母和一个数字。

知道我如何完成此操作(最好通过模型属性)吗?

您可以在App_StartIdentityConfig.cs中配置密码要求

// Configure validation logic for passwords
manager.PasswordValidator = new PasswordValidator
{
    RequiredLength = 4,
    RequireNonLetterOrDigit = false,
    RequireDigit = false,
    RequireLowercase = false,
    RequireUppercase = false,
};

另一种选择是创建IIdentityValidator<string>的实现并将其分配给UserManagerPasswordValidator属性。它只有一种方法,ValidateAsync,您可以在那里定义任何类型的密码验证。我知道就自动客户端验证而言,这与在模型类中使用属性没有相同的优势,但只是想我会把它作为任何出现的人的替代方案。

例如

public class CustomPasswordValidator : IIdentityValidator<string>
{
    public int MinimumLength { get; private set; }
    public int MaximumLength { get; private set; }
    public CustomPasswordValidator(int minimumLength, int maximumLength)
    {
        this.MinimumLength = minimumLength;
        this.MaximumLength = maximumLength;
    }
    public Task<IdentityResult> ValidateAsync(string item)
    {
        if (!string.IsNullOrWhiteSpace(item) 
            && item.Trim().Length >= MinimumLength 
            && item.Trim().Length <= MaximumLength)
            return Task.FromResult(IdentityResult.Success);
        else return Task.FromResult(IdentityResult.Failed("Password did not meet requrements."));
    }
}

您可以将 RegularExpressionAttribute 与以下答案中的规则一起使用:

用于验证密码强度的正则表达式

/*Passwords must be at least min. 8 and max. 16 characters in length, 
minimum of 1 lower case letter [a-z] and 
a minimum of 1 upper case letter [A-Z] and
a minimum of 1 numeric character [0-9] and
a minimum of 1 special character: $ @ $ ! % * ? & + = # 
PASSWORD EXAMPLE : @Password1 
*/
pass = TextBoxPss1.Text;  
Regex regex = new Regex("^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&+=#]) [A-Za-z\d$@$!%*?&+=#]{8,16}$");
    Match match = regex.Match(pass);
    if (match.Success)
    {TextBoxPss1.Text = "OK" }

相关内容

  • 没有找到相关文章

最新更新