3

我们正在使用 ASP.Net 4.5 和 Visual Studio 2012 构建应用程序,母版页包含 Anti-XSRF 代码。当我们开始在 VS 中使用应用程序时,该代码就在那里,我们希望保留它,因为它似乎有助于保留。但是我们随机得到一个错误:

System.InvalidOperationException:验证反 XSRF 令牌失败。

这发生在没有回发的页面上,也发生在有回发的登录页面上,但它是随机完成的。一个人最近提到他们以测试用户身份登录,让机器一段时间处于非活动状态,当他们返回时,他们试图访问安全页面,被要求登录,以另一个用户身份登录,然后收到此错误。否则其他用户说当他们刚刚点击主页时就会发生这种情况,而主页又没有回发。

我无法找到任何解决方案来解决这个问题,还有其他人有这个问题吗?

4

1 回答 1

6

当页面呈现给浏览器时,当前用户名嵌入在 __VIEWSTATE 中。当回发发生时,反 XSRF 逻辑会检查当前用户名是否与提交的 __VIEWSTATE 中嵌入的用户名匹配。因此,预计在工作流程中间更改登录用户(使用回发)将导致错误。如果用户只是在站点中导航,则不应发生此错误。

如果您检查服务器日志,您会看到用户确实在对发生故障的页面执行回发。XSRF 逻辑已经以“if (IsPostBack)”检查为条件。您可以通过查看 Site.master 代码隐藏文件自己验证这一点。

于 2013-11-08T17:06:18.887 回答