Tenemos un sitio web que usa MVC3 y un método de autenticación personalizado que no depende en absoluto de la autenticación de formularios, al menos por lo que puedo decir. En web.config configuramosAntiForgeryToken sin autenticación de formularios
<authentication mode="None"></authentication>
y nunca usamos/configuramos HttpContext.User en ningún lugar del código. El problema es cuando se usa @ Html.AntiForgeryToken() en algunos casos, el usuario recibe este mensaje de error:
A required anti-forgery token was not supplied or was invalid
Centralizamos todas las comprobaciones de lucha contra la falsificación en OnAuthorization con este código:
if (String.Compare(filterContext.HttpContext.Request.HttpMethod, "post", true) == 0)
{
var forgery = new ValidateAntiForgeryTokenAttribute();
forgery.OnAuthorization(filterContext);
}
Eso es donde ocurre la excepción Tenemos defined a machineKey in web.config para evitar que se generen nuevas claves cuando el grupo de aplicaciones se recicla. Esto no solucionó el problema.
Luego pensamos que tal vez el navegador del cliente no está enviando cookies. Comenzamos a registrar cookies y notamos que, en algunos casos, se envía la cookie RequestVerificationToken_Lw, pero en otros no, a pesar de que otras cookies, como las hechas por Google Analytics, se envían correctamente. ¿Podría ser algo en el navegador que está eliminando algunas cookies y dejando otras?
Parece que el anti-forgery token depends on forms authentication. ¿Es este el caso? Cualquier forma de seguir utilizando AntiForgeryToken cuando no se utiliza la autenticación de formularios de manera confiable. Tenga en cuenta que el método que describí anteriormente funciona en más del 90% de los casos, pero no podemos precisar por qué no funciona para algunas personas.
¿Pensamientos?
Gracias!
¿Por qué preocuparse por los tokens de falsificación si no está utilizando ninguna autenticación? El objetivo de un ataque CSRF es que un atacante realice acciones en nombre de un usuario autenticado en un sitio. Y si un sitio no usa autenticación, CSRF parece no tener sentido. –
Estoy utilizando la autenticación, pero no la autenticación de formularios. – pbz
qué tipo de autenticación estás usando? –