【问题标题】:Error occurring - System.InvalidOperationException: Validation of Anti-XSRF token failed发生错误 - System.InvalidOperationException:验证反 XSRF 令牌失败
【发布时间】:2013-11-06 19:29:41
【问题描述】:

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

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

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

环顾四周,我找不到任何解决方案,还有其他人遇到这个问题吗?

【问题讨论】:

    标签: asp.net visual-studio-2012 asp.net-4.5


    【解决方案1】:

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

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

    【讨论】:

    • 我查看并确实看到 User's Identity.Name 存储在 ViewState 中,我感觉这是问题所在,但不确定如何复制错误以查看它。每当我尝试复制它时,它总是会正确清除该值。
    • 这也可以通过在将用户重定向到登录页面之前调用 FormsAuthentication.SignOut() 来纠正。
    猜你喜欢
    • 1970-01-01
    • 2020-10-28
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-19
    • 1970-01-01
    相关资源
    最近更新 更多