当前位置:  开发笔记 > 编程语言 > 正文

Web场上的表单身份验证4.0

如何解决《Web场上的表单身份验证4.0》经验,为你挑选了1个好方法。

这实际上是在推动我的香蕉 - 从明天开始我正在度假,但如果我今天无法工作那么它就会受到威胁 - 所以任何帮助都非常感激!

首先,我的网站定义了一个手动定义的元素,以便Web场中的两个Web服务器保持同步.我已经通过IIS管理器对此进行了验证(因此,尽管与其他许多问题相似,我仍然会问.)它看起来像这样(键被省略 - 但它们是正确的长度):


该网站正在运行Asp.Net MVC3,我在"正常"模式下使用Forms身份验证(即不是2.0 compat模式).我正在使用表单身份验证来创建身份验证票证 - 使用如下代码:

FormsAuthentication.SetAuthCookie(userName, false);

My Forms Auth配置非常简单; 没有IIS或服务器范围的设置覆盖记录的默认值:


  

然后我根据这个MSDN主题劫持了cookie阅读功能,这样我就可以创建我想要的主体和身份.

问题是 - 只有一半的Web场能够解密身份验证cookie,另一半(即任何一个未对用户进行身份验证)只是给出:

System.Security.Cryptography.CryptographicException: Length of the data to decrypt is invalid.

将此作为堆栈跟踪的顶部:

[CryptographicException: Length of the data to decrypt is invalid.]
System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount) +12521039
System.Security.Cryptography.CryptoStream.FlushFinalBlock() +53
System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(Boolean fEncrypt, Byte[] buf, Byte[] modifier, Int32 start, Int32 length, Boolean useValidationSymAlgo, Boolean useLegacyMode, IVType ivType) +331
System.Web.Security.FormsAuthentication.Decrypt(String encryptedTicket) +293

我们使用的是一个稍微古老(但非常可靠)的负载均衡器 - 它不会修改 HTTP流量 - 这种情况下的流量是HTTP; 我能够验证它始终是一台服务器,而不是通过使用Fiddler来解密和检查流量.

这显然指出不同步machineKeys - 但它们不是 - 所以任何想法发生了什么!!?

提前致谢!



1> 小智..:

当不同的服务器具有不同的补丁时,它有可能改变加密(/ decryption)的行为,因此可能导致此运行时异常:

System.Security.Cryptography.CryptographicException: Length of the data to decrypt is invalid.

有关此问题的更多信息,请访问:http://blog.evonet.com.au/post/SystemSecurityCryptographyCryptographicException-Length-of-the-data-to-decrypt-is-invalid.aspx

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有