none
Comment débloquer totalement le compte d'un utilisateur ? RRS feed

  • Question

  • Bonjour,

    Je développe avec Visual Web Developper 2008 Express sous Windows XP.

    Je désire débloquer le compte d'un utilisateur lorsqu'il est bloqué après plusieurs tentatives de login avec un mauvais mot de passe. La seule info que j'ai trouvée jusqu'à présent sur les sites est d'utiliser l'instruction { Membership.GetUser(username).UnlockUser } mais celle-ci ne fait que remettre le paramètre IsLockedOut à 0. Le paramètre  'FailedPasswordAttemptCount' reste à sa valeur maximum et donc dès la première erreur, l'utilisateur est à nouveau bloqué ! Quelle est donc l'instruction permettant de débloquer correctement un utilisateur pour remettre logiquement la base dans un état de départ vierge ?

    Merci

    mercredi 4 août 2010 10:06

Réponses

  • Bonjour,

    Ce problème vient donc d'un bogue de l'implémentation du Membership de MySQL. Je vous conseille de voir du côté du support/communauté de MySQL pour régler ce problème.

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Marqué comme réponse DepWeb jeudi 5 août 2010 07:22
    jeudi 5 août 2010 07:15
    Modérateur

Toutes les réponses

  • Bonjour,

     

    A partir de la documentation MSDN sur la propriété MaxInvalidPasswordAttempts, la valeur de cette propriété est initialisée a zéro dès que l’utilisateur écrit le mot de passe correct.

     

    Pour réinitialiser cette valeur immédiatement, vous pouvez utiliser une requête SQL update  dans la table User :

    http://msdn.microsoft.com/fr-fr/library/6tc47t75.aspx

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF

    Café des usages

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

    mercredi 4 août 2010 12:46
  • Bonjour,

    Pour débloquer correctemnt un utilisateur, utilisez la méthode Membership.UnlockUser() : http://msdn.microsoft.com/fr-fr/library/system.web.security.membershipprovider.unlockuser(VS.80).aspx

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    mercredi 4 août 2010 12:51
    Modérateur
  • Merci pour cette réponse (rapide) mais elle n'est pas tout à fait exacte !

    Cette valeur n'est réinitialisée à zéro que si le mot de passe correct est entré avant qu'elle n'ait atteint sa valeur maximum (cf doc citée).

    Lorsque la valeur maximum est atteinte, elle n'est plus jamais réinitialisée et la fonction UnlockUser n'est d'aucune utilité (je vais supposer que c'est un bug...).

    J'aurais voulu pouvoir disposer d'un niveau d'abstraction vis-à-vis de la base de données pour éviter des éventuels problèmes dans le futur si elle devait être modifiée. Peut-être que la fonction UnlockUser sera corrigée dans un futur proche. Sinon jusqu'à présent, effectivement, je n'ai pas trouvé, jusqu'ici, d'autres moyen de réaliser mon objectif qu'en allant directement changer cette valeur dans la base de données.

    Si quelqu'un a un chemin permettant de conserver cette abstraction donnée par UnlockUser, je suis preneur !

    mercredi 4 août 2010 15:12
  • Bonjour,

    Veuillez m'excuser pour le lien que je vous ai fourni, il n'est pas correct. En effet, il faut faire un Membership.GetUser("<login>").UnlockUser() pour débloquer un utilisateur.

    Je n'arrive pas à reproduire votre problème, en effet l'appel à UnlockUser() chez moi me réinitialise bien le compteur FailedPasswordAttemptCount  à 0

    De plus, j'ai vérifié dans le code de la procédure stockée appellé par UnlockUser : aspnet_Membership_UnlockUser on y trouve bien une requête UPDATE qui remet le compteur à 0 :

      UPDATE dbo.aspnet_Membership
      SET IsLockedOut = 0,
        FailedPasswordAttemptCount = 0,
        FailedPasswordAttemptWindowStart = CONVERT( datetime, '17540101', 112 ),
        FailedPasswordAnswerAttemptCount = 0,
        FailedPasswordAnswerAttemptWindowStart = CONVERT( datetime, '17540101', 112 ),
        LastLockoutDate = CONVERT( datetime, '17540101', 112 )
      WHERE @UserId = UserId
    

    Pouvez-vous vérifier que le code de la procédure stockée aspnet_Membership_UnlockUser sur votre poste contient bien cette requête UPDATE ?

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    mercredi 4 août 2010 21:03
    Modérateur
  • Merci pour le suivi.

    Pour apporter un peu de précision à mon problème, je travaille avec une base MySql. La procédure stockée aspnet_Membership_UnlockUser n'apparaît pas dans mon shéma et je ne sais pas où je peux la trouver. Pourtant quand j'appelle UnlockUser, le flag IsLockedOut passe bien de 1 à 0.

     Je confirme cependant les faits suivants :

    Dans Web.config, maxInvalidPasswordAttempts="7".   La première fois que je rentre un mauvais mot de passe pour un utilisateur, la colonne FailedPasswordAttemptCount de celui-ci dans la table my_aspnet_membership passe de 0 à 1.

    Si la fois suivante, je rentre le bon mot de passe, l'utilisateur est bien connecté mais la variable FailedPasswordAttemptCount reste à 1, et ceci même si je me connecte plusieurs fois de suite avec le bon mot de passe.

    La 7eme fois que je me connecte avec un mot de passe erroné, le compte est bloqué avec une valeur de FailedPasswordAttemptCount=6 et IsLockedOut=1. Lorsque j'appelle la fonction UnlockUser pour cet utilisateur, IsLockedOut passe à 0 mais FailedPasswordAttemptCount reste à 6. Ce qui fait que dès le premier mot de passe erroné, le compte est à nouveau bloqué !

    J'ai donc manifestement un problème dans ma configuration. Avez-vous une idée pour la résolution de celui-ci ?

    Merci

     

     

     

     

     

    jeudi 5 août 2010 07:07
  • Bonjour,

    Ce problème vient donc d'un bogue de l'implémentation du Membership de MySQL. Je vous conseille de voir du côté du support/communauté de MySQL pour régler ce problème.

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Marqué comme réponse DepWeb jeudi 5 août 2010 07:22
    jeudi 5 août 2010 07:15
    Modérateur
  • Pour info :

    C'est un programme que j'ai repris en cours de route. Après toute cette discussion, j'ai reçu des informations en interne. En fait, les tables membership, ... ont été créées à partir du fichier memberSql.sql prévu pour sqlServer. C'est le seul fichier qui ait été utilisé et celui-ci ne contient aucune procédure stockée. Ce qui m'étonne quand même, c'est que UnlockUser() fasse passer le flag IsLockedOut de 1 à 0 alors qu'aucune procédure stockée n'existe (et ce manque ne génère aucune erreur !).

    Merci pour le suivi et les conseils.

    jeudi 5 août 2010 07:31
  • Bonjour,

    Ce qui m'étonne quand même, c'est que UnlockUser() fasse passer le flag IsLockedOut de 1 à 0 alors qu'aucune procédure stockée n'existe (et ce manque ne génère aucune erreur !).
    UnlockUser() fait appel à une implémentation d'un membership provider. C'est au provider de passer IsLockedOut à 0 et de remettre les compteur à 0. Si les compteurs ne sont pas remis à 0, cela vient d'ou oubli/bogue de l'implémentation du membership provider.

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    jeudi 5 août 2010 07:38
    Modérateur
  • Ok, je regarde de ce coté là.

    Merci beaucoup. Bonne journée !

     

     

    jeudi 5 août 2010 07:52