asp.net-mvc - 为什么 AntiForgeryToken 隐藏字段与我机器上的 cookie 不同?

标签 asp.net-mvc asp.net-mvc-3 antiforgerytoken

我刚刚通过修改默认登录表单,对一个简单的 ASP.NET MVC 3 示例进行了快速测试。根据 this article , 两个隐藏域 __RequestVerificationToken和 cookies __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(我认为只有“盐”和 token )和 HTML 标记(盐、 token 、创建时间、用户名)。

如果你对细节感兴趣,就拿ILSpy找System.Web.Mvc.AntiForgeryDataSerializer , System.Web.Mvc.AntiForgeryDataOnAuthorization System.Web.Mvc.ValidateAntiForgeryTokenAttribute的方法

关于asp.net-mvc - 为什么 AntiForgeryToken 隐藏字段与我机器上的 cookie 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7186253/

相关文章:

c# - 将 IEnumerable<T> 导出到 Excel

asp.net-mvc-3 - 无法在 HttpStatusCodeResult 中指定 StatusMessage

c# - 如何在 MVC3 中使用 RequireHttps 属性指定不同的端口

asp.net-mvc - 尽管在 Web.config 中设置了 X-Frame 选项,但在 global.asax 中抑制防伪 X-Frame 选项 header 会削弱安全性?

c# - ASP.NET MVC 渲染 Model 时如何绑定(bind) jQuery 事件

asp.net - 单个应用程序中的多个母版页

asp.net-mvc - ASP.NET MVC : returning plaintext file to download from controller method

c# - asp.net MVC3 Razor : display actionlink based on user role

jquery - Ajax POST 中不存在 __RequestVerificationToken

angular - 使用 Angular 4 和 Asp.Net Core 2 获取 ValidateAntiForgeryToken