宝玉的blog

专注于web开发技术
随笔 - 78, 评论 - 1563, 引用 - 157

导航

关于


目前致力于ChinaCommunityServer的开发。

msn: junminliu(at)msn.com

标签

每月存档

最新留言

  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:37
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:31
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:30
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:29
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:25
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:25
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:25
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:25
  • re:Silverlight中,防止ComboBox抢焦点
    在家”用网路”赚全世界的钱! 这是真正实现跨国事业最好的机制。藉由网路无远弗届的力量, 让全球超过180个国家变成一个单一市场,在你加入的那一刻, 网路能到达的地方,就是你收入能到达的地方。 ...
    by jackielongteng(注册) on 2009/6/14 13:19:48
  • re:Silverlight中,防止ComboBox抢焦点
    <p>我是初学者,您已经写了一个 组件上传的功能 。。我在2008下测试通过,,,但是弄2005测试的时候 发现 progress.aspx.cs页面的</p> <p&...
    by jxh12345j(注册) on 2009/4/7 8:55:12
  • ufnnutdh - Google Search
    ufnnutdh - Google Search
    by (匿名) on 2008/10/27 17:44:45
  • veysaync - Google Search
    veysaync - Google Search
    by (匿名) on 2008/10/5 5:20:49
  • mzgmhgio - Google Search
    mzgmhgio - Google Search
    by (匿名) on 2008/9/22 23:34:49
  • rhmhnyma - Google Search
    rhmhnyma - Google Search
    by (匿名) on 2008/9/22 7:48:44
  • re: 发布一个爱心小软件——网页抓图
    Maxthon应该有这个功能
    by passos(匿名) on 2008/7/21 20:05:23

广告

 

如果你的Asp.Net程序执行时碰到这种错误:“验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate”那么说明你没有让你的应用程序使用统一的machineKey,那么machineKey的作用是什么呢?按照MSDN的标准说法:“对密钥进行配置,以便将其用于对 Forms 身份验证 Cookie 数据和视图状态数据进行加密和解密,并将其用于对进程外会话状态标识进行验证。”也就是说Asp.Net的很多加密,都是依赖于machineKey里面的值,例如Forms 身份验证 Cookie、ViewState的加密。默认情况下,Asp.Net的配置是自己动态生成,如果单台服务器当然没问题,但是如果多台服务器负载均衡,machineKey还采用动态生成的方式,每台服务器上的machinekey值不一致,就导致加密出来的结果也不一致,不能共享验证和ViewState,所以对于多台服务器负载均衡的情况,一定要在每台站点配置相同的machineKey。

machineKey生成的算法:

validationKey = CreateKey(20);

decryptionKey = CreateKey(24);

     protected string CreateKey(int len)

     {

            byte[] bytes = new byte[len];

            new RNGCryptoServiceProvider().GetBytes(bytes);

              StringBuilder sb = new StringBuilder();

              for(int i = 0; i < bytes.Length; i++)

              {   

                   sb.Append(string.Format("{0:X2}",bytes[i]));

              }

              return sb.ToString();

     }

附参考的matchineKey配置:

<?xml version="1.0"?>

<configuration>

  <system.web>

    <machineKey validationKey="3FF1E929BC0534950B0920A7B59FA698BD02DFE8" decryptionKey="280450BB36319B474C996B506A95AEDF9B51211B1D2B7A77" decryption="3DES" validation="SHA1"/>

     </system.web>

</configuration>

打印 | 张贴于 2007-01-23 11:25:00 | Tag:Web技术

留言反馈

#回复: Asp.Net应用程序中为什么要MachineKey?如何生成MachineKey? 编辑
谢谢你的文章,我网站的问题已经修复~~~
2007-10-17 20:30:00 | [匿名用户:小三]
#回复: Asp.Net应用程序中为什么要MachineKey?如何生成MachineKey? 编辑
你太棒了
我的就是这样
最后我就没用Forms验证
直接在每个页面用session判断的
谢谢你了
崇拜ing
2007-10-13 10:21:00 | [匿名用户:yangkun]
#回复: Asp.Net应用程序中为什么要MachineKey?如何生成MachineKey? 编辑
2007-09-05 05:29:00 | [匿名用户:dfhdfh]
#Asp.Net应用程序中为什么要MachineKey 编辑
转自:http://blog.joycode.com/dotey/archive/2007/01/23/92460.aspx Asp.Net应用程序中为什么要MachineKey?如何生成Machi...
2007-07-23 11:15:00 | [匿名用户:dinglin]
#回复: Asp.Net应用程序中为什么要MachineKey?如何生成MachineKey? 编辑
宝玉挺牛的,又学了一手/.
2007-03-23 10:46:00 | [匿名用户:向宝玉同学学习]
#回复: Asp.Net应用程序中为什么要MachineKey?如何生成MachineKey? 编辑
如果不是集群,就是多台服务器,指定了相同的machineKey,共享验证也是可行的吗?和FrameWork的版本有无关系,一台是1.1 另外一台是2.0. 如果可以的话,跨机器实现SSO
就可行了。目前,我只实现单机的SSO,多机的没有试验过。
2007-01-24 01:00:00 | [匿名用户:spyer]
#回复: Asp.Net应用程序中为什么要MachineKey?如何生成MachineKey? 编辑
这样将加密跟解密的key显式的放在config文件有些不安全吧
iis好像有个放置秘钥的容器,支持导入导出,可以在一台机器上生成然后导出到其他集群的机器上
2007-01-23 16:18:00 | [匿名用户:Shawn]
#回复: Asp.Net应用程序中为什么要MachineKey?如何生成MachineKey? 编辑
好,又跟宝玉学了不少东西!
2007-01-23 13:45:00 | [匿名用户:bing]
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode.MVC引擎 0.5.1.8