在多个 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 保护的网站,而且我们不了解这些网站的运营商,因此我认为信任是这些网站的一个大问题。
当我在一个动作在同一个项目中的表单中使用 @Html.AntiForgeryToken()
时,它工作得很好。但是,如果表单的操作位置在同一解决方案的不同项目中,我会收到以下错误:
无法解密防伪令牌。如果此应用程序由网络场或集群托管,请确保所有计算机都是 运行 相同版本的 ASP.NET 网页,并且 <machineKey>
配置指定了显式加密和验证密钥。不能在集群中使用 AutoGenerate。
有没有办法在不同项目之间使用AntiForgeryToken?
防伪令牌的 signing/encryption 由您的网络配置的 <machinekey>
部分中保存的密钥管理。如果未设置,则会为每个应用程序自动生成该值。这意味着每个应用程序都有不同的机器密钥,因此一个应用程序的令牌无法被另一个应用程序解密。
幸运的是,可以为每个应用生成您自己的值并将它们存储在您的网络配置中。此处详细描述了执行此操作的过程:
https://msdn.microsoft.com/en-us/library/ff649308.aspx#paght000007_webfarmdeploymentconsiderations
如果安全不是您最关心的问题,那么您可以考虑选择众多可用的在线机器密钥生成器之一。由于我找不到任何受 TLS/SSL/HTTPS 保护的网站,而且我们不了解这些网站的运营商,因此我认为信任是这些网站的一个大问题。