visual tutorial studio net mvc instalar español asp asp.net asp.net-mvc asp.net-mvc-4

asp.net - tutorial - El token de cookie antifalsificación y el token de campo de formulario no coinciden en MVC 4



mvc 4 visual studio 2017 (6)

Aquí hay un sitio que genera Machnie Keys único http://www.developerfusion.com/tools/generatemachinekey/

Estoy usando el módulo de inicio de sesión predeterminado en ASP.NET MVC 4. No cambié ningún código en la aplicación predeterminada y lo alojé en un servidor compartido.

Después de iniciar sesión usando la página de inicio de sesión predeterminada. mantuve el navegador inactivo por un tiempo. Luego, obviamente, la aplicación se redirige a la página de inicio de sesión cuando intento realizar cualquier acción del controlador con el atributo [Authorize] .

Luego intento volver a iniciar sesión y aparece un error cuando hago clic en el botón de inicio de sesión.

The anti-forgery cookie token and form field token do not match.

Acción de inicio de sesión

// POST: /Account/Login [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public ActionResult Login(LoginModel model, string returnUrl) { if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe)) { return RedirectToLocal(returnUrl); } // If we got this far, something failed, redisplay form ModelState.AddModelError("", "The user name or password provided is incorrect."); return View(model); }


Otra razón para tener este error es si se salta entre las áreas [Autorizar] que el navegador no almacena en caché (esto se haría a propósito para evitar que los usuarios vean contenido protegido cuando se desconecten y usar el botón Atrás, por ejemplo )

Si es así, puede hacer que sus acciones no se almacenen en caché, por lo que si alguien hace clic en el botón Atrás y termina en un formulario con @ Html.AntiForgeryToken (), el token no se almacenará en caché desde antes.

Consulte esta publicación para saber cómo agregar [NoCache] ActionFilterAttribute: Cómo manejar el envío de formulario ASP.NET MVC Atrás?


Para mí, esto fue causado al enviar un formulario usando una etiqueta de botón. Cambiar esto a una etiqueta de envío de entrada resuelve el problema.


Resolví el problema al agregar explícitamente una clave de máquina en web.config.

Nota: Por razones de seguridad, no use esta clave. Genere uno desde https://support.microsoft.com/en-us/kb/2915218#AppendixA . No utilice en línea uno, detalles, http://blogs.msdn.com/b/webdev/archive/2014/05/07/asp-net-4-5-2-and-enableviewstatemac.aspx

<machineKey validationKey="971E32D270A381E2B5954ECB4762CE401D0DF1608CAC303D527FA3DB5D70FA77667B8CF3153CE1F17C3FAF7839733A77E44000B3D8229E6E58D0C954AC2E796B" decryptionKey="1D5375942DA2B2C949798F272D3026421DDBD231757CA12C794E68E9F8CECA71" validation="SHA1" decryption="AES" />

Aquí hay un sitio que genera llaves de máquina únicas:

http://www.developerfusion.com/tools/generatemachinekey/


Tuve este problema durante mucho tiempo y asumí que era algo malo con ASP.NET.

En realidad, fue el servidor. Yo estaba con WinHost entonces, y tienen un límite de memoria de 200 MB. Tan pronto como tuve ~ 20 usuarios conectados al mismo tiempo, se alcanzó mi límite. En este punto, todos cerraron sesión y produjeron estos problemas.


asegúrate de poner @ Html.AntiForgeryToken () en la forma de tu página