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

时间:2016-07-19 14:42:58

标签: c# asp.net-mvc-4 antiforgerytoken

当我在一个行为在同一个项目中的表单中使用@Html.AntiForgeryToken()时,它可以完美地运行。但是,如果表单的操作位置在同一解决方案中的不同项目中,则会出现以下错误:

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

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

1 个答案:

答案 0 :(得分:1)

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

幸运的是,可以生成自己的值并将其存储在每个应用的Web配置中。这样做的过程在这里有详细描述:

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

如果安全性不是您最关心的问题,那么您可能会考虑许多可用的在线机器生成器之一。由于我无法通过TLS / SSL / HTTPS找到任何安全保障并且我们不了解这些网站的运营商,我认为信任是这些网站的一个大问题。