在多个 ASP.NET 个子项目之间使用 AntiForgeryToken

Using AntiForgeryToken between multiple ASP.NET sub projects

当我在一个动作在同一个项目中的表单中使用 @Html.AntiForgeryToken() 时,它工作得很好。但是,如果表单的操作位置在同一解决方案的不同项目中,我会收到以下错误:

无法解密防伪令牌。如果此应用程序由网络场或集群托管,请确保所有计算机都是 运行 相同版本的 ASP.NET 网页,并且 <machineKey> 配置指定了显式加密和验证密钥。不能在集群中使用 AutoGenerate。

有没有办法在不同项目之间使用AntiForgeryToken?

防伪令牌的 signing/encryption 由您的网络配置的 <machinekey> 部分中保存的密钥管理。如果未设置,则会为每个应用程序自动生成该值。这意味着每个应用程序都有不同的机器密钥,因此一个应用程序的令牌无法被另一个应用程序解密。

幸运的是,可以为每个应用生成您自己的值并将它们存储在您的网络配置中。此处详细描述了执行此操作的过程:

https://msdn.microsoft.com/en-us/library/ff649308.aspx#paght000007_webfarmdeploymentconsiderations

如果安全不是您最关心的问题,那么您可以考虑选择众多可用的在线机器密钥生成器之一。由于我找不到任何受 TLS/SSL/HTTPS 保护的网站,而且我们不了解这些网站的运营商,因此我认为信任是这些网站的一个大问题。