vista validar una pasar parametros net mvc formulario controlador campos asp asp.net-mvc antiforgerytoken

asp.net mvc - validar - Si agrego múltiples formularios en una sola página, ¿necesito agregar Tokens de Anti-Falsificación en cada formulario?



post mvc c# (2)

Hay un gran artículo here he señalado algunas secciones importantes.

En pocas palabras, si un token se puede deserializar de la colección de cookies de la solicitud, reutilizará ese token en lugar de generar uno nuevo. Si no existe un token en la colección de cookies, creará una instancia de "AntiForgeryToken" y generará aleatoriamente una nueva matriz de 16 bytes para representar el token.

public AntiForgeryToken GetCookieToken(HttpContextBase httpContext) { HttpCookie cookie = httpContext.Request.Cookies[this._config.CookieName]; if (cookie == null || string.IsNullOrEmpty(cookie.Value)) return (AntiForgeryToken) null; return this._serializer.Deserialize(cookie.Value); }

Después de generar el primer token y guardarlo en la colección de cookies, todas las llamadas subsiguientes al método auxiliar "Html.AntiForgeryToken ()" seguirán los mismos pasos y reutilizarán el token existente de la colección de cookies en lugar de generar un nuevo valor.

Como se trata de una cookie de sesión, esto significa que el valor del token antifalsificación se genera solo una vez durante una sesión del navegador y se reutiliza para todas las llamadas posteriores.

Entonces, ¿por qué los valores de los campos ocultos son diferentes entre sí si reutilizan el mismo token?

Entonces, mientras que los valores encriptados pueden parecer diferentes, los valores desencriptados son los mismos.

byte[] one = MachineKey45CryptoSystem.Instance.Unprotect("iAdQj5D0qrMuTggD8WpnOZPlVOfHg_qmPIEjnULAYd1h56cV2cL51rcaY8_UgxQbav5_6KTAtyE52ir1X6GmaS9ZPgw1"); byte[] two = MachineKey45CryptoSystem.Instance.Unprotect("Shvi8Bxe6-a8zfCfDGnxkaC-IETsbjkR9iIylwn-2VRWQ-GtQkdowdFw1biU7dN3j-xPJZHYQPe-hNfWspYjy_ZcCCY1"); byte[] three = MachineKey45CryptoSystem.Instance.Unprotect("ZhaVFngUMLo88jmTIx___BTWlYFyKh1GalwEeffRl0-o3Gu7_m98k6aQjO7IysZIdXxVx6TqL6QIfX19Uwq3Ia6dghA1");

La comparación de las tres matrices de bytes revela que son idénticas.

Si la respuesta es sí, ¿cómo ASP.NET MVC averiguará qué token se vinculó a qué formulario y cómo validarlo?

He visto que está creando dos fichas separadas para cada formulario.


No hay nada específico que deba hacer en este caso. ASP.NET MVC simplemente reutilizará el mismo valor para todos los formularios, por lo que no necesita saber qué formulario envió la solicitud para validarla. Simplemente coloque un Html.AntiForgeryToken() en cada formulario y decore cada acción del controlador que está publicando con el atributo [ValidateAntiForgeryToken] y debería estar bien.