na stronie internetowej zapewniamy hiperłącze (GET), które użytkownik może kliknąć, aby uwierzytelnić:ASP.NET MVC - ValidateAntiForgeryToken upływającym
@Html.ActionLink("Please Login", "MyMethod", "MyController")
mapuje to do następującej metody kontrolera, która zwraca widoku:
[RequireHttps]
public ActionResult MyMethod()
{
return this.View(new MyModel());
}
Ten widok zawiera formularz, w którym użytkownik podaje swoje dane uwierzytelniające; Formularz zawiera wymagany AntiForgeryToken.
Gdy użytkownik wysyła formularz, poniższa metoda kontroler jest nazywany:
[HttpPost]
[RequireHttps]
[ValidateAntiForgeryToken]
public ActionResult MyMethod(MyModel model)
{
// my logic
}
To doskonale działa dobrze, większość czasu ...
Jednakże, jeżeli użytkownik opuści ich przeglądarka otwarta za „znaczące” okres czasu, a następnie wykonuje następujące czynności w krótkich odstępach czasu:
- kliknie hiperłącze (GET), aby załadować Zaloguj formie
- wypełnia formularz i przedkłada
Dostają wyjątek informując ich, że Anti-Fałszerstwo żeton był albo nie dostarczone lub jest nieprawidłowy.
Nie rozumiem, dlaczego tak się dzieje: widok (zawierający formularz) jest tworzony po uśpieniu przeglądarki, więc wszystkie żetony zapobiegające fałszerstwu powinny być "świeże". Jednak coś jest ewidentnie nie tak z tym projektem, ale nie jestem pewien, jak najlepiej to naprawić.
Z góry dziękuję, jeśli masz jakieś sugestie.
Griff
Chcę tylko wspomnieć, że moja aplikacja doświadczył ten problem przez kilka lat i chciałbym mieć rozwiązanie. Wypróbowałem wszystkie standardowe poprawki klucza komputera. – Jonathan
Podwiń te rękawy i zanurz się w źródle. Załatwię pompę. – Nick
Istnieje [artykuł] (http://stackoverflow.com/questions/5767768/troubleshooting-anti-forgery-token-problems?rq=1), który szczegółowo opisuje kroki sprawdzania poprawności tokena. Jednym z kroków jest walidacja z użytkownikiem Kontekstu - nie ma pewności, czy to mogło wyjść z etapu. Tak czy inaczej, rozwiązanie pozostaje niejasne. – DrGriff