Comment Pouvez-vous tester si un ASP.NET le mot de passe de membre répondra-t-il aux exigences de complexité configurées?
j'ai un ASP.NET page qui permet à un administrateur de changer le mot de passe d'un utilisateur. Comme l'administrateur ne connaît pas le mot de passe de l'utilisateur, j'utilise ce qui suit:
MembershipUser member = Membership.GetUser(_usernameTextBox.Text);
member.ChangePassword(member.ResetPassword(), _passNewTextBox.Text);
-- comme décrit par ce ainsi question .
si le nouveau mot de passe ne répond pas aux exigences de complexité qui sont configurées dans le web.fichier de configuration, puis le mot de passe aura été réinitialisé, mais pas changé en celle désirée. Si le nouveau mot de passe ne répond pas aux exigences de complexité, alors le mot de passe ne devrait pas changer du tout.
y a-t-il un moyen facile de tester le nouveau mot de passe par rapport aux exigences de complexité?
6 réponses
vous pouvez utiliser les propriétés suivantes pour tester le mot de passe contre:
- l'Adhésion.PasswordStrengthRegularExpression
- l'Adhésion.MinRequiredPasswordLength
- l'Adhésion.MinRequiredNonAlphanumericCharacters
notez que la propriété PasswordStrengthRegularExpression sera vide chaîne si vous ne l'avez pas configuré dans le web.fichier de configuration.
pour des informations sur l'appariement des expressions régulières, voir la référence MSDN sur Regex.IsMatch (String)
*Merci à Matt pour les commentaires utiles.
/// <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;
}
je n'ai pas accès au wiki.
une ligne doit être ajustée pour corriger un petit bogue.
modifier si (nonAlnumCount < Membership.MinRequiredNonAlphanumericCharacters) comme suit si (nonAlnumCount < membershippprovider.MinRequiredNonAlphanumericCharacters)
basé sur la solution de Bamba, j'ai décidé de faire une méthode d'extension sur le fournisseur d'adhésion (et réduit le code:
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
}
pour l'utiliser, il suffit d'appeler Membership.Provider.IsPasswordValid(...)
au besoin.
vous pouvez utiliser un validateur D'Expression régulier pour vérifier si le mot de passe répond aux exigences de complexité.
vous pouvez également utiliser une commande Pasword Strength Meter .
ce n'est peut-être pas la façon la plus facile, mais utilisez un validateur d'expression régulier sur la page et faites-le correspondre aux exigences de mot de passe. De cette façon, vous n'avez même pas à poster si le mot de passe n'est pas bon.