Le verrouillage d'un utilisateur dans une page ASP .Net Fournisseur D'Appartenances Personnalisé
J'ai dû créer un fournisseur d'appartenances personnalisé pour mon ASP .Un projet de réseau afin de correspondre à notre schéma de base de données, et je rencontre des problèmes de configuration de verrouillage de l'utilisateur si ils obtiennent leur mot de passe erroné trois fois, comme c'est pris en charge par les fournisseurs standard.
Est-ce quelque chose que j'ai besoin d'implémenter moi-même, ou doit-il être pris en charge intrinsèquement?
Je n'ai pas de code qui traite spécifiquement avec elle (et aucun des membres interface semblent traiter avec elle en particulier), mais si j'ai besoin d'implémenter moi-même, comment puis-je informer l'utilisateur qu'ils sont en lock-out? Ai-je besoin d'élever une sorte d'exception dans ValidateUser?
Solution
Honte je ne peux pas marquer deux réponses, les liens fournis par Dave R donner un excellent aperçu en profondeur du fonctionnement de l'adhésion, et ce Zhaph souligné, était exactement ce que j'ai fait, la manipulation de l'verrouillé logique dans le fournisseur d'appartenances personnalisé.
J'ai ensuite géré la condition d'erreur en utilisant le contrôle de Connexion du LoginError événement et vérifié pour voir si l'utilisateur a été verrouillé pour afficher le message d'erreur approprié.
Vous devez vous connecter pour publier un commentaire.
Scott Mitchell a écrit une excellente série de tutoriels sur le ASP.NET site. Ce lien contient des informations sur la création d'un fournisseur personnalisé et traite de la logique de verrouillage:
http://www.asp.net/LEARN/security/tutorial-06-cs.aspx
Il n'y a également aucune construit méthode pour déverrouiller des comptes (c'est à dire que vous avez à faire grâce à des outils de base de données si vous utilisez quelque chose de similaire à la SqlMembershipProvider). Scott a également écrit un article sur la création d'une INTERFACE utilisateur pour gérer cela, que vous pouvez trouver ici:
http://www.asp.net/LEARN/security/tutorial-14-vb.aspx
En fait je recommande la lecture de l'ensemble de la série. Scott est un excellent communicateur.
J'espère que cette aide.
C'est quelque chose que vous devriez écrire vous-même.
La base de données par défaut de schéma comporte les colonnes suivantes dans le aspnet_Membership table:
La tentative de comptage sera incrémenté à chaque tentative a échoué dans la tentative de la fenêtre, et le moment de la première tentative est stocké dans la fenêtre de démarrage de la colonne, une fois FailedPasswordAttemptCount est égale à la maxInvalidPasswordAttempts de la configuration, le IsLockedOut est réglé.
Que Michiel unis, votre méthode ValidateUser devrez alors vérifier ces valeurs en fonction des paramètres de la configuration de fournisseur par défaut, ce sont:
Une fois que l'utilisateur a eu le maximum de tentatives de connexion, vous devez vous assurer que vous avez défini le MembershipUser.IsLockedOut est défini à partir de votre fournisseur, vous pouvez alors vérifier que la valeur et de se comporter de manière appropriée, si vous utilisez le nom par défaut des contrôles, cette valeur sera probablement déjà être vérifiée pour vous.
Reproduire les conditions qui conduisent à la condamnation (trop de mauvaises tentatives de connexion).
Parce que les fournisseurs d'Appartenance faire un voyage à leur backend à chaque fois, il est judicieux de limiter cette approche de fournisseurs de nombre raisonnable de MaxInvalidPasswordAttempts.
De votre fournisseur d'appartenances personnalisé, vous devez mettre en œuvre la fonction ValidateUser. Là, vous non seulement de vérifier si le nom d'utilisateur et mot de passe sont valides, mais vous pouvez aussi récupérer le nombre de tentatives de mot de passe non valide, etc à partir de votre magasin de données. Si le nom d'utilisateur/mot de passe est valide, réinitialiser le mot de passe tentative comte, otherelse augmentation de la tentative de comptage. Le SqlMembershipProvider stocke également les LastAttempt datetime, de sorte que vous ne pouvez pas bruteforce vous parce que vous n'êtes pas autorisé à tenter à l'intérieur d'un certain laps de temps.