En una página Web, se proporciona un hipervínculo (GET) que el usuario puede hacer clic en para autenticar:ASP.NET MVC - ValidateAntiForgeryToken expira
@Html.ActionLink("Please Login", "MyMethod", "MyController")
Se correlaciona con el siguiente método que devuelve un controlador de Vista:
[RequireHttps]
public ActionResult MyMethod()
{
return this.View(new MyModel());
}
Esta vista contiene el formulario en el que el usuario proporciona sus credenciales; el Formulario contiene el AntiForgeryToken requerido.
Cuando el usuario envía el formulario, el siguiente método controlador se llama:
[HttpPost]
[RequireHttps]
[ValidateAntiForgeryToken]
public ActionResult MyMethod(MyModel model)
{
// my logic
}
Esto funciona perfectamente bien, la mayoría de las veces ...
Sin embargo, si el usuario deja su navegador abierto durante un período "significativo" de tiempo y luego realiza los siguientes pasos en rápida sucesión:
- hace clic en el hipervínculo (GET) para cargar el formulario de conexión
- rellena el formulario y presenta
Consiguen una excepción informándoles de que el token Anti-Falsificación o bien no fue proporcionado o no era válida.
No entiendo por qué este es el caso: la Vista (que contiene el formulario) se crea después de que el navegador estuvo inactivo y por lo tanto los tokens antifalsificación deberían estar todos "frescos". Sin embargo, algo está evidentemente mal con este diseño, pero no estoy seguro de cómo corregirlo.
Gracias de antemano si tiene alguna sugerencia.
Griff
sólo quiero mencionar que mi aplicación ha experimentado este problema desde hace unos años y me gustaría tener una solución. Intenté todas las correcciones de teclas de máquina estándar. – Jonathan
Enrolle esas mangas y sumérjase en la fuente. Yo seré el hombre de la bomba. – Nick
Hay un [artículo] (http://stackoverflow.com/questions/5767768/troubleshooting-anti-forgery-token-problems?rq=1) que detalla los pasos de validación para el token. Un paso es validar en contra del usuario del Contexto, no estoy seguro de si eso podría haberse desviado. De cualquier manera, la solución no está clara. – DrGriff