MVC 5 e Multiple AntiForgeryTokens: Cosa sta succedendo?

3

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?

    
posta Jason 06.10.2014 - 21:25
fonte

1 risposta

2

I thought the AFT in the cookie and the one in the form were supposed to match.

Ti sbagliavi! non hanno bisogno di essere uguali - Tuttavia, hanno alcune relazioni crittografiche tra loro ...

Qui puoi trovare informazioni dettagliate su questa funzionalità e su come funziona ...

    
risposta data 02.03.2015 - 10:14
fonte

Leggi altre domande sui tag