ASP.NETMAC验证失败和Cookies提前失效的解决方法

时间:2009/12/6 15:40:14      阅读:6636          

    最近把一个以前很久前的项目从ASP.NET1.1升级到了2.0,在使用过程中出现了头痛的问题,Cookies在程序设置的是2个小时失效,但每次都是在30分钟后就失效了,经常出现MAC验证失败,程序其他地方都没有做过修改,搞不清楚是那的问题,今天有空查了一下资料,找到了解决方法,原来是MachineKey的问题,才想起前段时间服务器安装了另外一个应用程序,其MachineKey是固定的,而我的程序没有指定MachineKey。

    validationKey和decryptionKey的默认值是AutoGenerate,由系统随机生成密钥,如果在本地或者使用的是独立主机通常不会有什么问题,但是使用虚拟主机,一台服务器上有多个虚拟主机存在时就会出现以上问题,MSDN中也特别指出不能在群集中使用 AutoGenerate应该指定固定的密钥值,至此真相水落石出,立刻在web.config中添加关于machineKey的配置项,并手动设置其中的密钥值,这里请注意,不同加密算法对于密钥的最大字符长度是不同的,在这里能够使用的有AES,DES,3DES,SHA1,MD5,我只知道DES的密钥字符长度为16,3DES长度为48,手动设置时密钥长度必须等于其最大长度,否则会出错!至于密钥的16进制值可以随便输入。

具体操作方法如下:

找到网站运行根目录下的web.config文件,如下图加亮行所示加上相应的项。设置时,请自行修改KEY值,这关系到服务器的加密安全。

参考的matchineKey配置:

<system.web>
<machineKey validation="3DES" validationKey="319B474B1D2B7A87C996B280450BB36506A95AEDF9B51211" decryptionKey="280450BB36319B474C996B506A95AEDF9B51211B1D2B7A87" decryption="3DES"/>
</system.web>

 

machineKey的作用在于下述场景:

  • ASP.net 使用 forms authentication 时的 cookie 数据的加密和解密。以确保这部分数据不会被篡改。
  • viewstate 数据的加密和解密。以确保这部分数据不会被篡改。
  • 使用进程外session(out-of-process session)时,对会话状态标识进行验证。

ASP.net 1.0 以及 ASP.net 1.1, 我们都可以在下面地址的文件中找到machineKey的配置信息:

%Windir%\Microsoft.NET\Framework\<version>\config\machine.config

不同的是 ASP.net 1.0 找到的是如下的配置信息

<machineKey 
   validationKey="AutoGenerate" 
   decryptionKey="AutoGenerate" 
   validation="SHA1"
/>

ASP.net 1.1 找到的是如下信息:

<machineKey 
   validationKey="AutoGenerate,IsolateApps" 
   decryptionKey="AutoGenerate,IsolateApps" 
   validation="SHA1"
/>

但是 ASP.net 2.0 , .net Framework 3.0 ,.net Framework 3.5 这些版本中,我们在

%Windir%\Microsoft.NET\Framework\<version>\config\

目录的  machine.config 和 web.config 中找不到machineKey的设置。

这是因为, ASP.net 2.0 中,machineKey 的默认设置没有写在配置文件中。

ASP.net 2.0 中,machineKey 的默认设置如下:

<machineKey 
   validationKey="AutoGenerate,IsolateApps" 
   decryptionKey="AutoGenerate,IsolateApps"    
   validation="SHA1" 
   decryption="Auto" 
/>

我们如果要修改machineKey的默认设置,就需要在必要的地方新加machineKey的配置节点。

产生一个可用的 machineKey 配置信息可以使用下面地址提供的工具:
http://www.aspnetresources.com/tools/keycreator.aspx

评论
  • Re:ASP.NETMAC验证失败和Cookies提前失效的解决方法  (2009/12/27 17:10:24) by 李冰 

    我想请教一个 关于AJAX弹出窗 COOKIS验证

  • Re:ASP.NETMAC验证失败和Cookies提前失效的解决方法  (2009/12/30 4:27:59) by 拖鞋 

    这个地方久都没有更新了!

  • Re:ASP.NETMAC验证失败和Cookies提前失效的解决方法  (2010/1/15 14:57:29) by 鏇剧 

    cookies这个有这么好吗

  • Re:ASP.NETMAC验证失败和Cookies提前失效的解决方法  (2010/1/25 16:11:39) by 祁子 

    <p>已经好久没更新了,你看看那个世界排名就知道了</p>

  • Re:ASP.NETMAC验证失败和Cookies提前失效的解决方法  (2010/1/29 13:17:10) by linhin237 

    弱弱的问一下,如果是viewsatae呢?

  • Re:ASP.NETMAC验证失败和Cookies提前失效的解决方法  (2010/2/25 17:17:26) by shawn111 

    效验失败是cookies的问题?

  • Re:ASP.NETMAC验证失败和Cookies提前失效的解决方法  (2010/3/25 23:14:28) by 真实姓 

    cookies这个有这么好吗

  • Re:ASP.NETMAC验证失败和Cookies提前失效的解决方法  (2010/4/11 8:07:47) by 唐田 

    cookies是没办法的办法

  • Re:ASP.NETMAC验证失败和Cookies提前失效的解决方法  (2010/5/12 9:11:00) by nihao 

    <p>受用了,正找呢~</p>

  • Re:ASP.NETMAC验证失败和Cookies提前失效的解决方法  (2010/5/17 9:09:30) by tomtao 

     感謝分享

  • Re:ASP.NETMAC验证失败和Cookies提前失效的解决方法  (2010/5/20 17:01:36) by goansonpan 

    Cookies也不是特别好用!

  • Re:ASP.NETMAC验证失败和Cookies提前失效的解决方法  (2010/5/27 18:02:36) by rnin 

    Cookies也不是特别好用!

  • Re:ASP.NETMAC验证失败和Cookies提前失效的解决方法  (2010/6/19 14:56:25) by 闂傚倸鍊烽懗鍓佸垝椤栨粌鍨濈光偓閸曞灚鏅炴繝銏f硾閻吋绋?Url= 

    COOKIES 和SESSION结合使用.最合适开发B/S

  • Re:ASP.NETMAC验证失败和Cookies提前失效的解决方法  (2010/7/1 15:05:54) by luminmin 

    一般很少使用,

  • Re:ASP.NETMAC验证失败和Cookies提前失效的解决方法  (2010/7/15 18:44:39) by berer 

    <p>值得学习</p>

  • Re:ASP.NETMAC验证失败和Cookies提前失效的解决方法  (2010/9/23 13:29:57) by mmmmmmmx 

    <p>用的比较少</p>

  • Re:ASP.NETMAC验证失败和Cookies提前失效的解决方法  (2010/12/30 18:46:33) by danhuaixin 

    Cookies也不是特别好用,也没用.

  • Re:ASP.NETMAC验证失败和Cookies提前失效的解决方法  (2011/1/6 11:11:45) by feilang 

    Cookies也不是特别好用,也没用.

  • Re:ASP.NETMAC验证失败和Cookies提前失效的解决方法  (2012/9/20 9:11:54) by momo 

    这个网站确实太能用了

标 题:
 
姓 名:
 
主 页:

验证码:

评论:
 

Because of the cache,you may see your comments several minutes later.