In einer Webseite wir einen Hyperlink zur Verfügung stellen (GET), dass der Benutzer zu authentifizieren, klicken Sie können:ASP.NET MVC - ValidateAntiForgeryToken auslaufenden
@Html.ActionLink("Please Login", "MyMethod", "MyController")
Diese Karten der folgenden Controller-Methode, die eine Ansicht zurückgibt:
[RequireHttps]
public ActionResult MyMethod()
{
return this.View(new MyModel());
}
Diese Ansicht enthält das Formular, in dem der Benutzer seine Anmeldeinformationen eingibt; Das Formular enthält die erforderlichen AntiForgeryToken.
Wenn der Benutzer das Formular abschickt, wird die folgende Controller-Methode aufgerufen:
[HttpPost]
[RequireHttps]
[ValidateAntiForgeryToken]
public ActionResult MyMethod(MyModel model)
{
// my logic
}
Dies funktioniert sehr gut, die meiste Zeit ...
Wenn jedoch der Benutzer verlässt ihren Browser öffnen für einen „signifikanten“ Zeitraum und führt dann die folgenden Schritte in rascher Folge:
- Klicks auf den Hyperlink (GET) die Log-in-Form zu laden
- füllt das Formular aus und sendet
Sie erhalten eine Ausnahme, sie zu informieren, dass der Anti-Fälschungs Token war entweder nicht vorgesehen oder war ungültig.
Ich verstehe nicht, warum dies der Fall ist: Die Ansicht (mit dem Formular) wird erstellt, nachdem der Browser ruhte und so die Anti-Fälschungs-Token alle "frisch" sein sollten. Bei diesem Design ist jedoch offensichtlich etwas nicht in Ordnung, aber ich bin mir nicht sicher, wie ich es am besten beheben kann.
Vielen Dank im Voraus, wenn Sie irgendwelche Vorschläge haben.
Griff
Ich möchte nur erwähnen, dass meine App dieses Problem seit ein paar Jahren erlebt hat, und ich würde gerne eine Lösung haben. Ich habe alle Standard-Key-Fixes ausprobiert. – Jonathan
Rollen Sie die Ärmel hoch und tauchen Sie in die Quelle ein. Ich werde die Pumpe bemannen. – Nick
Es gibt einen [Artikel] (http://stackoverflow.com/questions/5767768/troublingshooting-anti-forgery-token-problems?rq=1), der die Validierungsschritte für das Token detailliert. Ein Schritt besteht darin, sich gegenüber dem Benutzer des Context zu vergewissern - nicht sicher, ob das nicht der Fall ist. In beiden Fällen bleibt die Lösung unklar. – DrGriff