IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Problème lors de la soumission d'un formulaire, erreur "Validation of viewstate MAC failed"


Sujet :

ASP.NET

  1. #1
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Points : 130
    Points
    130
    Par défaut Problème lors de la soumission d'un formulaire, erreur "Validation of viewstate MAC failed"
    Bonsoir,

    Je suis actuellement sous C#.Net 4.0, avec Visual Studio 2010 et SQL Server 2008.

    J'ai une erreur qui est apparue du type:

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.

    Elle apparaît systématiquement dans la même page (en tout cas pour le moment):

    J'ai un utilisateur qui s'authentifie à mon site
    Lorsqu'il s'est authentifié, il est rédirigé vers une page et je lui demande d'insérer un code (j'utilise un Yubikey pour ça) qui va permettre de déchiffrer des informations.

    Et c'est lorsqu'il entre le code, la clé USB qui emule un clavier fait "Enter", puis j'ai mon erreur qui arrive. J'ai également testé en tappant au clavier, rien n'y change.

    Dans mon masterpage, j'ai le code suivant qui permet de savoir si un utilisateur est authentifié ou non:

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    protected void Page_Init(object sender, EventArgs e)
            {
                try
                {
                    HttpCookie myCookie = null;
                    try
                    {
                        myCookie = Request.Cookies["myCookie"];
                    }
                    catch
                    {
                        Response.Redirect("~/login.aspx", true);
                    }
                    if (!Cookies.isConnected(myCookie))
                    {
                        Response.Redirect("~/login.aspx", true);
                    }
                }
                catch
                {
                    Response.Redirect("~/login.aspx", true);
                }
            }

    Et le code de ma page qui pose le problème est le suivant:

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <%@ Page Title="" Language="C#" MasterPageFile="~/View.Master" AutoEventWireup="true" CodeBehind="SetDevice.aspx.cs" Inherits="SetDevice" %>
     
    <asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
    </asp:Content>
    <asp:Content ID="Content2" ContentPlaceHolderID="leftMenuNavPlaceHolder" Runat="Server">
    </asp:Content>
    <asp:Content ID="Content3" ContentPlaceHolderID="mainContentPlaceHolder" Runat="Server">
        <asp:Label ID="lblSetDevice" runat="server" Text="Label">
            Please enter your Yubico :
        </asp:Label>
        <br /><br />
        <form id="frmSetDevice" runat="server" method="post" action="Home.aspx">
            <asp:TextBox ID="txtYubicoSecretKey" runat="server" TextMode="Password" Width="650"></asp:TextBox>&nbsp;&nbsp;&nbsp;
            <asp:Button ID="btnSetDevice" runat="server" Text="Continue" OnClick="btn_Continue"/>
        </form>
    </asp:Content>

    Et dans mon code qui est appelé lorsque le bouton est soumit:

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    protected void btn_Continue(object sender, EventArgs e)
            {
                try
                {
                    string Yubico = HttpUtility.HtmlDecode(Request.Form[@"ctl00$mainContentPlaceHolder$txtYubicoSecretKey"].ToString());
     
                    Login.PrepareEnvironment(Yubico);
     
                    Server.Transfer("./Home.aspx", false);
                }
                catch (Exception exc)
                {
                    Server.Transfer("./Error.aspx", false);
                }
            }

    Apparemment beaucoup de monde à cette erreur, mais je n'ai trouvé aucune méthode qui permet de régler ce problème

    Est-ce que quelqu'un aurait des idées ?

    Merci beaucoup pour votre aide, je désespère :'(

    L.

  2. #2
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Salut,

    Je ne pense pas que cela règlera ton problème, mais tu devrais déhà corriger ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string Yubico = HttpUtility.HtmlDecode(Request.Form[@"ctl00$mainContentPlaceHolder$txtYubicoSecretKey"].ToString())
    en ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string Yubico = HttpUtility.HtmlDecode(txtYubicoSecretKey.Text);
    Les identifiants des contrôles étant générés automatiquement, il ne faut pas faire de Request.Form en passant l'identifiant client du contrôle. En général on ne fait jamais de Request.Form en .NET.

    Pour le reste, le message d'erreur ne semble pas avoir de rapport avec le code, mais plutôt à la configuration du site.
    If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.
    Ton site est-il installé sur une ferme de serveurs?

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  3. #3
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Points : 130
    Points
    130
    Par défaut
    Citation Envoyé par Immobilis Voir le message
    Salut,

    Je ne pense pas que cela règlera ton problème, mais tu devrais déhà corriger ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string Yubico = HttpUtility.HtmlDecode(Request.Form[@"ctl00$mainContentPlaceHolder$txtYubicoSecretKey"].ToString())
    en ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string Yubico = HttpUtility.HtmlDecode(txtYubicoSecretKey.Text);
    Les identifiants des contrôles étant générés automatiquement, il ne faut pas faire de Request.Form en passant l'identifiant client du contrôle. En général on ne fait jamais de Request.Form en .NET.
    Ok merci bien Effectivement je vais corriger ça de suite!

    Citation Envoyé par Immobilis Voir le message
    Pour le reste, le message d'erreur ne semble pas avoir de rapport avec le code, mais plutôt à la configuration du site.Ton site est-il installé sur une ferme de serveurs?

    A+
    Non il est en local, je suis pour l'instant en train de finir le développement. Je viens d'essayer de désactiver le viewstate pour les contrôles un par un, mais là aussi toujorus cette même erreur

  4. #4
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Peut-être que le composant Yubico a besoin d'une clef MachineKey dans le web.config pour fonctionner. Jette un oeil ici pour savoir comment faire: http://msdn.microsoft.com/en-us/library/ff649308.aspx

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  5. #5
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Points : 130
    Points
    130
    Par défaut
    Normalement pas. J'ai quand même fait la manip, je suis allé sur http://www.developmentnow.com/articl...generator.aspx pour générer une clé, je l'ai mis dans mon web.config sous <system.web>, mais j'ai toujours la même erreur :/

  6. #6
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Points : 130
    Points
    130
    Par défaut
    J'ai également cette erreur sur toutes mes autres pages

    Personne n'a d'idée d'ou ça pourrait venir ?

  7. #7
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Points : 130
    Points
    130
    Par défaut
    J'ai trouvé une solution, je ne sais pas si c'est la solution mais au moins je n'ai plus cette erreur. Pour cela il ne faut pas mettre de "action="" " dans le formulaire. Sans cela, ça fonctionne impeccable

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] problème lors de l'envoi de mon formulaire
    Par cdevl32 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 04/03/2009, 18h19
  2. Réponses: 2
    Dernier message: 19/02/2009, 14h27
  3. Erreur 404 lors de la soumission d'un formulaire
    Par brunodim dans le forum Langage
    Réponses: 5
    Dernier message: 05/06/2007, 16h34
  4. problème lors de l'envoi d'un formulaire
    Par fk04 dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 15/04/2007, 21h00
  5. Réponses: 2
    Dernier message: 21/11/2005, 09h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo