ValidateAntiForgeryToken和授权超时

时间:2012-01-16 16:17:30

标签: asp.net-mvc-3

我有一个用ValidateAntiForgeryToken和Authorize修饰的ActionResult。达到我的表单授权超时限制后,我收到了" 未提供所需的防伪令牌或无效"错误而不是路由到我的登录页面。

有人可以解释为什么会这样吗?

2 个答案:

答案 0 :(得分:2)

ValidateAntiForgeryTokenAttribute

  

'表示用于检测服务器的属性   请求已被篡改。'

引用MSDNHtml.AntiForgeryToken()所做的是在表单中输出隐藏字段,例如:<input name="__RequestVerificationToken" type="hidden" value="XXX" />

回复后ValidateAntiForgeryTokenAttribute做的是将发布的值与之前存储的Cookie进行比较,以验证它们是否匹配。有关详细信息,请参阅http://aspnet.codeplex.com/SourceControl/changeset/view/72551#338576OnAuthorization方法)。 Cookie的名称为 RequestVerificationToken_Lw (您可以使用FireCookie等Cookie检查工具查看此内容。

存储的cookie是会话cookie(重要的位)。这意味着当达到授权超时(默认情况下在.NET中30分钟)时,cookie将过期,不会与下一个请求一起发送,并且与隐藏字段值的比较失败,抛出HttpAntiForgeryException

答案 1 :(得分:0)

确保在视图中的BeginForm(){....}中使用@ Html.AntiForgeryToken()

 @using(Html.BeginForm()){
       @Html.AntiForgeryToken()
     .
     .
     .
     .
    }

然后,这将在动作过滤器属性[ValidateAntiForgeryToken]

中得到验证