Asp.net-Mvc

為什麼 AntiForgeryToken 的隱藏欄位與我機器上的 cookie 不同?

  • September 30, 2015

我剛剛通過修改預設登錄表單使用簡單的 ASP.NET MVC 3 範例進行了快速測試。根據這篇文章,隱藏欄位__RequestVerificationToken和 cookie__RequestVerificationToken_Lw__必須包含與生成的相同的值Html.AntiForgeryToken()。但是當我在 Fiddle 中得到它們時並不完全相同,順便說一下,查看 MVC 3 原始碼,方法GetAntiForgeryTokenAndSetCookie似乎沒有使用鹽值來生成 cookie。MVC 3 有什麼變化嗎?

忘了說我仍然可以使用普通或 Ajax POST 請求成功登錄。

這是來自 Fiddle 的原始日誌:

POST http://localhost:51713/Account/LogOn HTTP/1.1
Referer: http://localhost:51713/Account/LogOn
Content-Length: 256
Origin: http://localhost:51713
X-Requested-With: XMLHttpRequest
Content-Type: application/x-www-form-urlencoded
Cookie: __RequestVerificationToken_Lw__=OIRtVqUvNt/LfDGeoVy3W1VhdKN7MwdbUZmRNScz4NqS4uV0I0vQH2MHg77SsVhcinK5SJi9mVcdBUWk2VMiPTk8EMUN2Zq0X4ucK8XQ3/zr6NoiIvVF73Bq8ahbFaY/IrNrWY7mmzvO9j/XVLNN2lNqgCd6I3UGZAw3/nlOmpA=

__RequestVerificationToken=zeDS%2F8MZE%2BLf%2FrRhevwN51J7bOE3GxlGNLQc8HogwFctF7glU1JboHePTTHa5YFe9%2FD2sY7w167q53gqvcwYZG1iZeecdnO4fdg6URdR4RUR%2BjIgk1apkXoxQ2xg48REfv4N5D4SHKU4MAf30Diy0MVyyF9N2Dl7uUGT6LbKHZU%3D&UserName=Tien&Password=tien&RememberMe=false

是什麼讓你認為它們應該是一樣的?:) 當然,它們必須在某種程度上具有可比性,但這並不意味著它們的序列化形式必須看起來相同。有一組不同的數據序列化為 cookie(我認為只有“鹽”和令牌)和 HTML 標記(鹽、令牌、創建時間、使用者名)。

如果您對細節感興趣,請使用 ILSpy 並查找System.Web.Mvc.AntiForgeryDataSerializer,System.Web.Mvc.AntiForgeryDataOnAuthorization方法System.Web.Mvc.ValidateAntiForgeryTokenAttribute

引用自:https://stackoverflow.com/questions/7186253