我有一个用ValidateAntiForgeryToken和Authorize修饰的ActionResult。达到我的表单授权超时限制后,我收到了" 未提供所需的防伪令牌或无效"错误而不是路由到我的登录页面。
有人可以解释为什么会这样吗?
答案 0 :(得分:2)
ValidateAntiForgeryTokenAttribute
'表示用于检测服务器的属性 请求已被篡改。'
引用MSDN。 Html.AntiForgeryToken()
所做的是在表单中输出隐藏字段,例如:<input name="__RequestVerificationToken" type="hidden" value="XXX" />
。
回复后ValidateAntiForgeryTokenAttribute
做的是将发布的值与之前存储的Cookie进行比较,以验证它们是否匹配。有关详细信息,请参阅http://aspnet.codeplex.com/SourceControl/changeset/view/72551#338576(OnAuthorization
方法)。 Cookie的名称为 RequestVerificationToken_Lw (您可以使用FireCookie等Cookie检查工具查看此内容。
存储的cookie是会话cookie(重要的位)。这意味着当达到授权超时(默认情况下在.NET中30分钟)时,cookie将过期,不会与下一个请求一起发送,并且与隐藏字段值的比较失败,抛出HttpAntiForgeryException
。
答案 1 :(得分:0)
确保在视图中的BeginForm(){....}中使用@ Html.AntiForgeryToken()
@using(Html.BeginForm()){
@Html.AntiForgeryToken()
.
.
.
.
}
然后,这将在动作过滤器属性[ValidateAntiForgeryToken]