Anti faux jeton signifie pour l'utilisateur “” mais l'utilisateur actuel est le “nom d'utilisateur”
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:
- Non-enregistrés l'utilisateur charge un dialogue (avec un anti-faux jeton)
- Utilisateur ferme la boîte de dialogue
- Utilisateur se connecte
- Utilisateur ouvre la boîte de dialogue même
- Utilisateur soumet le formulaire dans la boîte de dialogue
Anti faux jeton signifie pour l'utilisateur "" mais l'utilisateur actuel est
"nom d'utilisateur"
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 pour /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 @Html.AntiForgeryToken()
pour retourner un jeton pour le nouveau, utilisateur authentifié?
J'ai injecter une nouvelle GenericalPrincipal
avec une coutume IIdentity
sur chaque Application_AuthenticateRequest
donc, le temps que @Html.AntiForgeryToken()
est appelée HttpContext.Current.User.Identity
est, en fait, mon Identité personnalisée avec IsAuthenticated
propriété a la valeur true et encore @Html.AntiForgeryToken
encore semble rendre un jeton pour l'ancien utilisateur, sauf si je fais un rechargement de la page.
- Pouvez-vous réellement vérifier que l' @Html.AntiForgeryToken code est appelé sans recharger?
- Il est certainement, je peux le succès de la pause pour mission d'inspecter HttpContext.Actuel.L'utilisateur de l'objet, comme je l'ai mentionné
- Veuillez vous référer à ceci: stackoverflow.com/a/19471680/193634
- pourriez-vous nous dire quelle option avez-vous aller dans la réponse ci-dessous.
- Je crois que j'ai fait une exception pour aller avec un rechargement complet si je me souviens bien. Mais je m'attends à rencontrer ce problème très bientôt dans un nouveau projet. Nouveau si j'opte avec un meilleur option.
Vous devez vous connecter pour publier un commentaire.
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 appelez 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:
Juste cette fois, 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é.
Avoir une vue partielle avec juste
@Html.AntiForgeryToken()
et à droite après la connexion, faire une autre requête AJAX et remplacer votre anti-faux jeton avec la réponse à la demande.Il suffit de désactiver la vérification de l'identité de l'anti-contrefaçon de validation effectue. Ajoutez les lignes suivantes à votre Application_Start méthode:
AntiForgeryConfig.SuppressIdentityHeuristicChecks = true
.If this value is true, the system will assume that IIdentity.Name is appropriate for use as a unique per-user identifier and will not try to special-case IClaimsIdentity
AntiForgeryConfig
de l'auto-complétion ne me donne pas une option pour sélectionnerSuppressIdentityHeuristicChecks
. Je suis à l'aide d'Asp .NET Web APISystem.Web.Mvc.HttpAntiForgeryException: 'The provided anti-forgery token was meant for user "Domain\User Name", but the current user is "User Name".'
AntiForgeryConfig.SuppressIdentityHeuristicChecks = true
ne fonctionne pas pour moi[EditorBrowsable(EditorBrowsableState.Never)]
attribut. donc vous ne pouvez pas obtenir que la saisie semi-automatiquePour corriger l'erreur, vous devez placer le
OutputCache
Annotation de Données sur leActionResult
de la page de Login comme:Il se passe beaucoup de temps avec mon application, j'ai donc décidé de google pour elle!
J'ai trouvé une explication simple sur cette erreur!
L'utilisateur double-cliquez sur le bouton pour vous connecter! Vous pouvez en voir un autre utilisateur d'en parler sur le lien ci-dessous:
MVC 4, à la condition anti-faux jeton a été conçu pour l'utilisateur ", " mais l'utilisateur actuel est "utilisateur"
J'espère que cela aide! =)
J'ai eu le même problème, et cette sale hack obtenu fixe, au moins jusqu'à ce que je peux le résoudre d'une manière plus propre.
...
Le message s'affiche lorsque vous vous connectez quand vous êtes déjà authentifié.
Cette aide fait exactement la même chose que
[ValidateAntiForgeryToken]
attribut.Supprimer la
[ValidateAntiForgeryToken]
attribut de contrôleur et de placer cette fonction d'aide à l'action methode.Ainsi, lorsque l'utilisateur est déjà authentifié, rediriger vers la page d'accueil ou sinon, continuez avec la vérification de la validité de la lutte anti-contrefaçon jeton après cette vérification.
J'ai la même exception survenant la plupart du temps sur le serveur de production.
Pourquoi se produit-il?
Il se passe lors de la connexion de l'utilisateur avec des informations d'identification valides et une fois connecté et de rediriger vers une autre page, et après ils appuyez sur le bouton pour afficher la page de connexion et encore une fois, il est entré des informations d'identification valides que le temps de cette exception se produit.
Comment le résoudre?
Il suffit d'ajouter cette ligne et le travail parfait, pas une erreur.
J'ai eu une assez précis, même problème similaire dans le processus d'inscription. Une fois que l'utilisateur a cliqué sur le lien du courriel envoyé à eux, qu'ils allaient être enregistré et envoyé directement à un compte d'écran pour remplir un peu plus d'informations. Mon code est:
J'ai trouvé que le Retour à la Vue("AccountDetails") a été de me donner le jeton d'exception, je suppose parce que le ConfirmEmail fonction a été décoré avec AllowAnonymous mais la AccountDetails fonction de ValidateAntiForgeryToken.
Changeant le Retour à Retour RedirectToAction("AccountDetails") a résolu le problème pour moi.
Vous pouvez le tester en mettant un point d'arrêt sur la première ligne de votre Login (Get) de l'action. Avant d'ajouter la directive OutputCache le point d'arrêt serait frappé sur le premier chargement, mais après avoir cliqué sur le bouton précédent du navigateur, il ne serait pas. Après l'ajout de la directive, vous devriez vous retrouver avec le point d'arrêt d'être frappé à chaque fois, de sorte que le AntiForgeryToken sera le juste un, non pas un vide.
J'ai eu le même problème avec une page unique ASP.NET MVC application de Base. Je l'ai résolu en mettant
HttpContext.User
dans toutes les actions du contrôleur qui changent d'identité en cours créances (depuis MVC seulement pour les requêtes suivantes, tel que discuté ici). J'ai utilisé un résultat filtre au lieu de middleware pour ajouter les antiforgery des cookies pour mes réponses, ce qui fait en sorte qu'ils ont été générés seulement après le MVC action étaient de retour.Contrôleur (NB. Je suis de la gestion des utilisateurs avec ASP.NET de Base de l'Identité):
Résultat de filtre pour ajouter antiforgery cookies:
De démarrage.cs d'extrait de:
A un problème avec les anti-faux-jeton de validation sur le site internet: les utilisateurs d'ouvrir beaucoup d'onglets (des marchandises) et après avoir connecté sur l'un essaye d'ouvrir une session sur l'autre, et a obtenu de tels AntiForgeryException.
Donc, AntiForgeryConfig.SuppressIdentityHeuristicChecks = true n'aide pas pour moi, j'ai donc utilisé ces laid hackfix, il sera peut-être utile pour quelqu'un:
Pense que ça va être génial si anti-faux-jeton options de génération peut être défini, afin d'exclure nom d'utilisateur ou quelque chose comme ça.