Ho un semplice modulo di accesso. In esso, ho inserito 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" />
}
Successivamente, decido che voglio un AFT disponibile su ogni pagina in modo da poter eseguire determinate chiamate AJAX che corrispondono alle azioni che richiedono loro da qualsiasi luogo. Per farlo, inserisco la chiamata AFT nella mia vista layout.
<!DOCTYPE html>
<html>
<head>
</head>
<body>
@Html.AntiForgeryToken()
@RenderBody()
</body>
Vado alla mia pagina di accesso. Vedo che il cookie "__RequestVerificationToken" è impostato con un valore particolare. Esamino il mio HTML e vedo che entrambe le AFT (modulo di login e pagina di layout) sono state renderizzate. Ciò rende 3 diversi valori AFT che MVC mi ha dato. Compilare il modulo e inviare. Ho effettuato l'accesso.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Login(FormCollection form)
{
// etc.
}
Sono anche in grado di usare AJAX per inviare un AFT che richiede POST, usando uno degli altri AFT.
Cosa sta succedendo? Pensavo che l'AFT nel cookie e quello nella forma dovevano corrispondere. Come sta facendo MVC? Cosa sta facendo dietro le quinte?