.net中的form验证与负载均衡

来源:互联网 发布:北京好的婚纱摄影知乎 编辑:程序博客网 时间:2024/06/07 20:24

背景最近新接手一个web项目,需要部署到多台机器上做负载均衡。正好想把原来的有几个项目也加入进去,就又申请了一台服务器,先用两台服务器做负载均衡的测试。

因为公司的web项目都是用dotnet开发,用户登录验证使用的都是form验证写cookie的方式,因为cookie是保存在客户端,所以认为加入负载均衡应该很轻松。


事与愿违。加入负载均衡后,所有站点均登录失败(注:是在测试机上先做的测试)。很是奇怪。然后写日志跟踪。发现在一台服务器上写的cookie在另一台服务器上识别不了。

可以确定的是cookie肯定不会有这个问题,那么问题只能出现在form验证机制上。

查了一些资料和请教了小伙伴们,发现是因为两台服务器上的系统配置和补丁不一致,form验证对系统配置和补丁都有严格要求,必须一致,并且IE11貌似还不支持。

有一些解决办法,但是太复杂,另外form验证有较大的局限性,所以打算弃之不用,用户信息加密那块自己写了个小加密程序处理。



此外,持着开贴要负责的态度,把解决办法贴到下面,希望能给有需要的童鞋提供点帮助。

这里所说的form验证指<authentication mode="Forms">的登录验证方式。

解决方案:

一 打补丁

http://www.microsoft.com/china/technet/security/bulletin/MS10-070.mspx

根据操作系统选择相应的补丁。

 

二 修改machine.config中的machinekey

1、32位操作系统:

   打开C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config

   <machineKeyvalidationKey="F3690E7A3143C185AB1089616A8B4D81FD55DD7A69EEAA3B"decryptionKey="F3690E7A3143C185AB1089616A8B4D81FD55DD7A69EEAA3B"validation="3DES"decryption="Auto"/>

 

修改machineKey中的  decryption="Auto"为decryption="3DES"

如下:

<machineKeyvalidationKey="F3690E7A3143C185AB1089616A8B4D81FD55DD7A69EEAA3B"decryptionKey="F3690E7A3143C185AB1089616A8B4D81FD55DD7A69EEAA3B"validation="3DES"decryption="3DES "/>

 

2、64位操作系统:

打开C:\WINDOWS\microsoft.net\Framework64\v2.0.50727\CONFIG\machine.config

   <machineKeyvalidationKey="F3690E7A3143C185AB1089616A8B4D81FD55DD7A69EEAA3B"decryptionKey="F3690E7A3143C185AB1089616A8B4D81FD55DD7A69EEAA3B"validation="3DES"decryption="Auto"/>

 

修改machineKey中的  decryption="Auto"为decryption="3DES"

如下:

<machineKeyvalidationKey="F3690E7A3143C185AB1089616A8B4D81FD55DD7A69EEAA3B"decryptionKey="F3690E7A3143C185AB1089616A8B4D81FD55DD7A69EEAA3B"validation="3DES"decryption="3DES "/>

 

 

三 打完补丁后pcpopclub依然无法获取或解密

1、 就要查framework的补丁是否打多了。如下图红框中的补丁必须有,而且.netframework 4 Extended下只能有一个对应的补丁(KB2416472)。.net framework 4 Extended的其它多余补丁需要卸载。

 

2、检查web.config下的配置是否正确(如下)(第二步中的machineKey修改可以在对应项目        中的web.config中加入,而不用修改系统下的文件。)

<system.web>

     <authenticationmode="Forms">

       <formsname="pcpopclub"path="/"loginUrl=" "protection="Encryption"timeout="30"enableCrossAppRedirects="true"/>

      </authentication>

      <machineKeyvalidationKey="F3690E7A3143C185AB1089616A8B4D81FD55DD7A69EEAA3B"decryptionKey="F3690E7A3143C185AB1089616A8B4D81FD55DD7A69EEAA3B"validation="3DES"decryption="3DES"/>

 


四 framework高版本会有影响,无法解密。
0 0
原创粉丝点击