137 votes

Anti faux jeton est destinée au utilisateur « » mais l’utilisateur actuel est « username »

Je suis en train de construire une seule page de l'application et de rencontrer un problème avec les anti-faux jetons.

Je sais pas pourquoi le problème se produit-je ne sais pas comment le résoudre.

Je reçois le message d'erreur lorsque les événements suivants se produit:

  1. Non-enregistrés l'utilisateur charge un dialogue (avec un anti-faux jeton)
  2. Utilisateur ferme la boîte de dialogue
  3. L'utilisateur se connecte au
  4. L'utilisateur ouvre la boîte de dialogue même
  5. L'utilisateur soumet le formulaire dans la boîte de dialogue

     Anti forgery token is meant for user "" but the current user is "username"
    

La raison à cela est parce que mon application est 100% sur une seule page, et quand un utilisateur se connecte avec succès par le biais d'un ajax post d' /Account/JsonLogin, il me suffit de passer les points de vue actuels avec la "authentifié vues" retourné par le serveur, mais ne pas recharger la page.

Je sais que c'est la raison parce que si je simple rechargement de la page, entre les étapes 3 et 4, il n'y a pas d'erreur.

Il semble donc que, @Html.AntiForgeryToken() dans la forme chargée renvoie toujours un jeton pour l'ancien utilisateur jusqu'à ce que la page est rechargée.

Comment puis-je changer d' @Html.AntiForgeryToken() to return a token for the new, authenticated user?

J'injecte un nouveau GenericalPrincipal avec une coutume IIdentity sur chaque Application_AuthenticateRequest donc @Html.AntiForgeryToken() est appelé en HttpContext.Current.User.Identity est, en fait, mon Identité personnalisée avec IsAuthenticated propriété est définie à vrai, et pourtant, @Html.AntiForgeryToken encore semble rendre un jeton pour l'ancien utilisateur, sauf si je fais un rechargement de la page.

172voto

epignosisx Points 3023

Ce qui se passe parce que les anti-faux jeton incorpore le nom d'utilisateur de l'utilisateur dans le cadre de l'jeton chiffré pour mieux validation. Lorsque vous téléphonez d'abord à la @Html.AntiForgeryToken() l'utilisateur n'est pas connecté dans le jeton sera une chaîne vide pour le nom d'utilisateur, après que l'utilisateur se connecte, si vous ne remplacez pas l'anti-faux jeton de ne pas passer à la validation du fait que les premiers jeton a été pour utilisateur anonyme et maintenant nous avons un utilisateur authentifié avec un nom d'utilisateur.

Vous avez un peu d'options pour résoudre ce problème:

1 - Tout ce temps, laissez votre SPA de faire un POST complet et lorsque la page est actualisée, elle va avoir un anti-faux jeton avec la mise à jour du nom d'utilisateur intégré.

2 - Avoir une vue partielle avec juste @Html.AntiForgeryToken() et juste après la connexion, faire une autre requête AJAX et remplacer votre anti-faux jeton avec la réponse à la demande.

3 - il suffit de désactiver la vérification de l'identité de l'anti-contrefaçon de validation effectue. Ajoutez les lignes suivantes à votre méthode Application_Start: AntiForgeryConfig.SuppressIdentityHeuristicChecks = true.

26voto

user3401354 Points 1

Pour corriger l’erreur, vous devez placer le Annotation de données sur l’EEG de la page de connexion comme :

-3voto

user3364244 Points 5

A un problème avec les anti-forgery-jeton de validation dans la boutique en ligne : utilisateurs ouvrir plusieurs onglets (de marchandises) et après connecté sur un essayez de vous connecter sur un autre et a obtenu de telle AntiForgeryException. Ainsi, AntiForgeryConfig.SuppressIdentityHeuristicChecks = true n’a pas aidé pour moi, alors j’ai utilisé ce laid hackfix, il sera peut-être utile pour quelqu'un :

Pense qu’il sera génial si anti-forgery-jeton génération options peuvent être définies, d’exclure le nom d’utilisateur ou quelque chose comme ça.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X