Tengo un formulario de inicio de sesión simple. En ella, pongo un AntiForegeryToken.
@using (Html.BeginForm("Login", "Account"))
{
@Html.AntiForgeryToken()
<p>
<label>Email</label>
<input type="text" name="Email" value="" />
</p>
<p>
<label>Password</label>
<input type="password" name="Password" value="" />
</p>
<input type="submit" value="Login" />
}
A continuación, decido que quiero un AFT disponible en cada página para poder ejecutar ciertas llamadas AJAX que se correspondan con acciones que las requieran desde cualquier lugar. Para hacer esto, coloco la llamada AFT en mi vista de diseño.
<!DOCTYPE html>
<html>
<head>
</head>
<body>
@Html.AntiForgeryToken()
@RenderBody()
</body>
Voy a mi página de inicio de sesión. Veo que la cookie "__RequestVerificationToken" está configurada con un valor particular. Examino mi HTML y veo que se han procesado ambos AFT (formulario de inicio de sesión y página de diseño). Eso hace 3 valores AFT diferentes que MVC me ha dado. Relleno el formulario y lo envío. Estoy conectado.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Login(FormCollection form)
{
// etc.
}
También puedo usar AJAX para enviar un POST que requiera AFT también, usando uno de los otros AFT.
¿Qué está pasando? Pensé que el AFT en la cookie y el del formulario debían coincidir. ¿Cómo está haciendo esto MVC? ¿Qué está haciendo detrás de escena?