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