Как проверить, соответствует ли пароль членства в ASP.NET настроенным требованиям сложности? - PullRequest
20 голосов
/ 17 декабря 2008

У меня есть страница ASP.NET, которая позволяет администратору изменять пароль для пользователя. Поскольку администратор не знает пароль пользователя, я использую следующее:

MembershipUser member = Membership.GetUser(_usernameTextBox.Text);
member.ChangePassword(member.ResetPassword(), _passNewTextBox.Text);

- как описано в этом ТАК вопрос .

Если новый пароль не соответствует требованиям сложности, которые настроены в файле web.config, то пароль будет сброшен, но не будет изменен на нужный. Если новый пароль не соответствует требованиям сложности, тогда пароль вообще не должен меняться.

Есть ли простой способ проверить новый пароль на соответствие требованиям сложности?

Ответы [ 6 ]

19 голосов
/ 22 мая 2009
/// <summary>
/// Checks password complexity requirements for the actual membership provider
/// </summary>
/// <param name="password">password to check</param>
/// <returns>true if the password meets the req. complexity</returns>
static public bool CheckPasswordComplexity(string password)
{
    return CheckPasswordComplexity(Membership.Provider, password);
}


/// <summary>
/// Checks password complexity requirements for the given membership provider
/// </summary>
/// <param name="membershipProvider">membership provider</param>
/// <param name="password">password to check</param>
/// <returns>true if the password meets the req. complexity</returns>
static public bool CheckPasswordComplexity(MembershipProvider membershipProvider, string password)
{
    if (string.IsNullOrEmpty(password)) return false;
    if (password.Length < membershipProvider.MinRequiredPasswordLength) return false;
    int nonAlnumCount = 0;
    for (int i = 0; i < password.Length; i++)
    {
        if (!char.IsLetterOrDigit(password, i)) nonAlnumCount++;
    }
    if (nonAlnumCount < membershipProvider.MinRequiredNonAlphanumericCharacters) return false;
    if (!string.IsNullOrEmpty(membershipProvider.PasswordStrengthRegularExpression) &&
        !Regex.IsMatch(password, membershipProvider.PasswordStrengthRegularExpression))
    {
        return false;
    }
    return true;
}
18 голосов
/ 17 декабря 2008

Для проверки пароля можно использовать следующие свойства:

Обратите внимание, что свойство PasswordStrengthRegularExpression будет пустой строкой, если вы не настроили ее в файле web.config.

Информацию о сопоставлении регулярных выражений см. В справочнике MSDN по Regex.IsMatch (String)

* Спасибо Мэтту за полезные комментарии.

3 голосов
/ 02 октября 2013

Основываясь на решении Bamba, я решил создать метод расширения для поставщика членства (и сократил код:

    public static bool IsPasswordValid(this MembershipProvider membershipProvider, string password)
    {
        return (!string.IsNullOrEmpty(password) && // Password is not empty or null AND
            password.Length >= membershipProvider.MinRequiredPasswordLength && // Meets required length AND
            password.Count(c => !char.IsLetterOrDigit(c)) >= membershipProvider.MinRequiredNonAlphanumericCharacters && // Contains enough non-alphanumeric characters AND
            (string.IsNullOrEmpty(membershipProvider.PasswordStrengthRegularExpression) || // Either there is no RegEx requirement OR
                Regex.IsMatch(password, membershipProvider.PasswordStrengthRegularExpression))); // It matches the RegEx
    }

Чтобы использовать его, вам нужно всего лишь позвонить Membership.Provider.IsPasswordValid(...), где это необходимо.

3 голосов
/ 09 января 2010

У меня нет доступа к вики.

Одна строка должна быть скорректирована, чтобы исправить небольшую ошибку.

изменить if (nonAlnumCount

0 голосов
/ 17 декабря 2008

Возможно, это не самый простой способ, но используйте валидатор регулярных выражений на странице и сделайте так, чтобы он соответствовал требованиям к паролю. Таким образом, вам даже не придется отправлять ответные сообщения, если пароль неправильный.

0 голосов
/ 17 декабря 2008

Вы можете использовать средство проверки регулярных выражений, чтобы проверить, соответствует ли пароль требованиям сложности.

Также вы можете использовать Pasword Strength Meter control.

...