Asp.net-Mvc
為什麼 AntiForgeryToken 的隱藏欄位與我機器上的 cookie 不同?
我剛剛通過修改預設登錄表單使用簡單的 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.AntiForgeryData和OnAuthorization方法System.Web.Mvc.ValidateAntiForgeryTokenAttribute