3

我认为我已经尝试了对这个问题的所有标准响应,并且我知道我已经阅读了数百个关于这个问题的问题和帖子,但他们似乎都没有解决它或阐明原因在我的场景中。(我已经下降了 5 个小时,而且没有更近的时间了 :-( )

  • 我有一个由 2 台服务器组成的网络农场。

  • 我已经在两台机器上的 machine.config 中设置了机器密钥和验证密钥

  • 加密:SHA1,解密:AES - 这些是默认值,可以更改它们吗?

  • 我已验证链中没有其他配置文件(web.cfg、apphost 等)具有这些值的设置。

  • 我已经向站点添加了一个页面(基于此 SO),该页面将机器键值吐回,并验证它们在对两台机器的请求中是相同的,并且与机器 .config 中的值匹配

  • 服务器端会话状态处于共享状态服务器,我已经验证 sessionid 在对 2 个服务器的请求之间保持不变。

  • 我已验证页面已完全加载,并且 __EVENTVALIDATION 隐藏字段已在开始发布之前呈现到页面中。视图状态大小在 7.64kb 时还不错

当页面从对服务器 1 的请求呈现,然后再发回服务器 2 时,我会感到害怕......

Error Message:

Unable to validate data.
at System.Web.Configuration.MachineKeySection.GetDecodedData(Byte[] buf, Byte[] modifier,   Int32 start, Int32 length, Int32& dataLength)
at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString)   HttpApplication.RecordError => HttpApplication.RaiseOnError => global_asax.Application_Error

帖子是由一个标准的、纯粹的 asp 链接按钮触发的,页面上没有 ajax。

任何和所有的帮助将不胜感激。

设置 enableViewStateMAC = false 不是解决方案:-)

4

3 回答 3

2

继承了配置状态下的服务器,我从未质疑过密钥的有效性!!!...刚刚检查了它们在两台服务器上是否匹配...

保持所有加密/解密和验证算法设置不变,我使用这个工具生成了新的密钥,它比其他工具有更多的选项。

问题解决了

故事的寓意:如果有疑问,请生成新密钥

...但是为什么以及如何?一些带有视图状态的回发与旧密钥一起工作得很好,只有当回发到不同的服务器时,问题才变得明显。如果密钥无效-缺少字符或其他内容-那么每个回发都应该失败-我认为

于 2013-04-09T13:35:50.423 回答
1

如果您确定两个盒子上的机器密钥相同,那可能是其加密/解密吗?

您是否尝试过使用 Triple DES 并在两台服务器上的 machine.config 中设置 decryptionKey?

在这里检查

于 2013-04-09T10:32:59.747 回答
1

确保 machineKeys 相同的一种简单方法是在 web.config 中添加这样的行。

注意:假设您在两台服务器上都有相同的 web.config 并确保validationKey 和decryptionKey 有效

您可以使用http://aspnetresources.com/tools/machineKey来生成它。

<system.web>
  <machineKey validationKey="*D9B0EDEA69D81A89BF5FBA2B08BAF691013F86B89A1F6BA8068C6ECC9539074" decryptionKey="*AE2B1966AF65D08F03EDFB" validation="SHA1" decryption="AES" />
于 2013-04-09T12:33:30.913 回答