【问题标题】:ASP.NET MVC Anti-Forgery Token IssuesASP.NET MVC 防伪令牌问题
【发布时间】:2025-12-25 23:50:10
【问题描述】:

我们在 ASP.NET MVC 4 站点上使用 Amazon EC2 Elastic Beanstalk,但在用户尝试登录后出现错误:

无法解密防伪令牌。如果这个应用程序是 由 Web Farm 或集群托管,确保所有机器都在运行 相同版本的 ASP.NET 网页和 配置指定显式​​加密和验证密钥。 AutoGenerate 不能在集群中使用。

我们认为问题可能是由于会话状态处于 proc 中并且具有动态实例,因此我们将其移至 SQL Server,但仍然出现错误。奇怪的是,有时登录很好,有时你得到错误。

对于像 EC2 这样的动态 Web 服务器环境中的 ASP.NET MVC,是否需要做一些特别的事情来处理这个问题?

【问题讨论】:

标签: asp.net asp.net-mvc amazon-ec2


【解决方案1】:

您需要在 webconfig 中包含显式设置的解密密钥和验证密钥

<configuration>
  <system.web>
    <machineKey decryptionKey="Decryption key goes here, IsolateApps" 
                validationKey="Validation key goes here, IsolateApps" />
  </system.web>
</configuration>

详情可以查看以下文章http://iamdotnetcrazy.blogspot.com/2013/08/how-to-solve-anti-forgery-token-could.html

【讨论】:

  • 谢谢,这很好用。我没有使用 IsolateApps 部分。有必要吗?
  • 很高兴知道它有效,不需要,这就是为什么*.com/a/15400821/499930
  • 只是检查除了添加机器密钥之外是否还有其他选项。如果我更改服务器,我将不得不不断更新我的配置中的机器密钥
【解决方案2】:

我删除了“IsolatedApps”,这似乎对我有用。

【讨论】:

    【解决方案3】:

    我的解决方法是像这样获取 cookie 和表单令牌值:

    AntiForgery.GetTokens(null, out var cookieToken, out var formToken);
    

    【讨论】: