【发布时间】:2017-06-14 10:20:14
【问题描述】:
在我的应用程序中,我使用 @Html.AntiForgeryToken() 来装饰表单,然后我通过继承 IAuthorizationFilter 实现了一个 CustomAuthorizationFilter,该方法具有检查AntiForgery 用于包括 Ajax 调用在内的操作方法。
这是我的 CheckForAntiForgery 方法:
private static void CheckForAntiForgery(HttpRequestBase request)
{
var cookie = request.Cookies["__RequestVerificationToken"];
if (cookie != null)
{
var cookieToken = cookie.Value;
var formToken = request.Headers["__RequestVerificationToken"];
AntiForgery.Validate(cookieToken, formToken);
}
}
我正在使用 Ajax 调用保存方法并将 form.serialize() 作为数据发送。我在浏览器中检查了 $('[name=__RequestVerificationToken]').val() 的值,并看到 "form.serialize()" 正在接收它价值。但是,当我进入上述方法时,'formToken' 与我在浏览器中看到的不同。 formToken 发送回应用程序后是否经过一些额外的处理?
另一个问题,在同一页面上,我尝试了多次保存点击,而我看到每次 $('[name=__RequestVerificationToken]').val() 的值发生变化,我在上面的方法中得到的 formToken 没有改变。有什么原因吗,还是我在执行 AntiForgery 令牌检查时遗漏了什么?
非常感谢。
【问题讨论】:
标签: ajax asp.net-mvc antiforgerytoken