asp.net mvc错误 - AntiForgeryToken“指定的解密密钥具有无效的十六进制字符”

时间:2016-12-23 09:45:58

标签: asp.net-mvc-5

我已经在我们客户的测试服务器上部署了一个asp.net mvc 5网站,当我浏览到带有表单的页面时出现以下错误:

  

“指定的解密密钥具有无效的十六进制字符”

查看堆栈跟踪,我可以看到这是由使用的表单上使用的防伪标记引起的:System.Web.Security.Cryptography.MachineKeyMasterKeyProvider.GenerateCryptographicKey()。

我通过将机器密钥元素添加到web.config来修复此问题,如this question的第一个答案和其他许多内容中所述。

在StackOverflow和其他地方读过这个问题后,我无法理解为什么在部署到的服务器上需要它。似乎只有在服务器是“Web场”的一部分但是部署到的环境是单个服务器时才明确定义web.config中的机器密钥。此外,在本地或在我们的内部开发服务器上运行站点时,我自己或与我合作的任何其他开发人员都没有遇到此问题。

任何人都可以帮助我理解为什么在单个服务器设置上将机器密钥添加到web.config是必要的吗?这可能与服务器本身的设置有关吗?

理想情况下,我不想指定机器密钥,但我主要关心的是充分了解导致此错误的原因。

欢迎任何建议或信息

1 个答案:

答案 0 :(得分:0)

我已经遇到了这个问题,但是无法更改machine.config文件,因此不得不在Web应用程序级别上更新本地web.config以包含machineKey节点并覆盖计算机级别的值。一开始很有趣,我尝试仅包括无效的解密和验证密钥:

<machineKey decryptionKey="513A71A2266CD92E99AA2970F18AE3F8A14DE3625BDD5792FB4AC15F9004693D" validationKey="FBC9407A7ECE1C60741B44303670247CBE2E08B0658ED1031CF4A2582BDDFA4CD2E27201B083A5DF39C56C2D5B91674BD4FAB2EE644FB067D2C43633D3E6A724" />

在机器密钥中同时包含解密和验证密钥,并指定解密和验证算法为我解决了这个问题:

<machineKey decryptionKey="513A71A2266CD92E99AA2970F18AE3F8A14DE3625BDD5792FB4AC15F9004693D" validationKey="FBC9407A7ECE1C60741B44303670247CBE2E08B0658ED1031CF4A2582BDDFA4CD2E27201B083A5DF39C56C2D5B91674BD4FAB2EE644FB067D2C43633D3E6A724" validation="SHA1" decryption="AES" />

我希望这对某人有帮助!