Estoy utilizando el método de ayuda AntiForgeryToken
. Por lo que entiendo acerca de AntiForgeryToken es que es una base de sesión, de modo que cada usuario tiene el mismo token pero otro usuario tendrá un token diferente (siempre que use las mismas sales para todos los formularios). Mi "problema" es que AntiForgeryToken
está generando tokens diferentes para el mismo usuario con la misma sal. Por ejemplo ...AntiForgeryToken cambios por solicitud
Contoller
public ActionResult Test()
{
return View();
}
Ver
@using (Html.BeginForm())
{
@Html.AntiForgeryToken("Salty!")
}
Salida Solicitud # 1
<input name="__RequestVerificationToken" type="hidden" value="K1sijFuYvyGUJjGg33OnLjJaU3tFpGFDutRt9TOFSkZ6FcrhJMMQPnOqjIHuTwBXs/sPBXEiE+1qyV9l63nnSO161b+OtLbaBoPC7K3/7wxtnuSY+N0o/fqBgVoDyac4dNVp+OvanKBSrHINKfc3WEg9269BHOJNzFowC6Aeac/afAGTGrBypxUHfqrKVowD" />
salida Petición # 2
<input name="__RequestVerificationToken" type="hidden" value="mOpP6LMQXnCmjr5/Wdtnhguh3PyZxWj7GWf8LYzZXPKcJBBT+DbAHvynquSD65O0DBw1RKR7DxCNg372ukftCOWms+o75CraMyFMnvjGk7RU+znIQm05eRQvr5H6d/MDyn+0DWm3jLnMBM9GplsgMRqbdAHzSe69/cS2x9A4X/9jFTZQHUWXXHUr0xewF8Rk" />
Las claves son diferentes para la misma sesión con la misma sal. ¿Tengo un malentendido fundamental de la protección CRSF? ¿O es esta una nueva característica?
¿Cambia los datos de sesión en el servidor cuando se emite un nuevo token? Todos los valores de mis cookies permanecen igual. Pensé que el valor de la cookie __RequestVerificationToken_Lw__ cambiaría. –
No, el servidor establece la cookie en el cliente. El cliente luego envía el mismo valor dos veces al publicar. Una vez codificado en los datos del formulario y una vez en la cookie (las cookies se transfieren al servidor en POST). El servidor solo conoce la clave de cifrado. No almacena nada más para fines anti XSRF. – m0sa
¿Alguna razón para no almacenar los tokens en sesión y nunca enviarlos al cliente? Algo así como: AntiForgery.GetTokens (null, out cookieToken, out formToken); return cookieToken + ":" + formToken; ¿Entonces solo almacena eso en sesión? –