ASP.NET machineKey的作用和使用方法

开发 后端
Asp.Net的很多加密,都是依赖于machineKey里面的值,例如Forms 身份验证 Cookie、ViewState的加密。本文介绍如何设置ASP.NET machineKey。

ASP.NET machineKey的作用

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

ASP.NET machineKey生成的算法:

  1. validationKey = CreateKey(20);  
  2.  
  3. decryptionKey = CreateKey(24);  
  4.  
  5.       protected string CreateKey(int len)  
  6.  
  7.       {  
  8.  
  9.              byte[] bytes = new byte[len];  
  10.  
  11.              new RNGCryptoServiceProvider().GetBytes(bytes);  
  12.  
  13.                StringBuilder sb = new StringBuilder();  
  14.  
  15.                for(int i = 0; i < bytes.Length; i++)  
  16.  
  17.                {      
  18.  
  19.                     sb.Append(string.Format("{0:X2}",bytes[i]));  
  20.  
  21.                }  
  22.  
  23.                return sb.ToString();  
  24.  
  25.       }  
  26.  

附参考的ASP.NET machineKey配置:

  1. <?xml version="1.0"?> 
  2.  
  3. <configuration> 
  4.  
  5.    <system.web> 
  6.  
  7.      <machineKey validationKey="3FF1E929BC0534950B0920A7B59FA698BD02DFE8" decryptionKey="280450BB36319B474C996B506A95AEDF9B51211B1D2B7A77" decryption="3DES" validation="SHA1"/> 
  8.  
  9.       </system.web> 
  10.  
  11. </configuration> 
  12.  

【编辑推荐】

  1. .NET框架解决DLL Hell问题:问题描述
  2. ASP.NET MVC单元测试:HttpContext类的Path属性解惑
  3. 自定义的ControllerFactory:接口实现,支持Area
  4. ASP.NET Routing之“解析URL”功能详解
  5. 为ASP.NET MVC应用添加自定义路由
责任编辑:yangsai 来源: 百度空间
相关推荐

2009-07-22 15:02:02

ASP.NET MVC

2009-08-24 16:56:26

ASP.NET Log

2009-07-28 13:26:34

Render方法ASP.NET

2009-07-27 12:22:03

ASP.NET和ASPASP.NET入门教程

2009-07-29 16:08:07

ASP和ASP.NET

2009-07-22 09:36:54

使用UpdataModASP.NET MVC

2009-08-03 14:39:25

Asp.Net函数集

2009-07-27 10:12:37

GridView和Ob

2009-07-22 18:03:00

ASP.NET ASP

2011-06-08 11:05:38

getpost

2009-07-20 16:04:37

ASP.NET fra

2009-07-22 09:11:02

Action方法ASP.NET MVC

2009-07-27 14:46:16

XML和ASP.NET

2009-07-29 14:12:45

ASP.NET tra

2009-07-24 15:35:00

ASP.NET Gri

2009-06-12 09:24:34

ASP.NET窗体ASP.NET MVC

2009-08-03 10:07:20

ASP.NET Ses

2009-08-10 14:55:43

ASP.NET htt

2009-08-05 14:27:55

ASP.NET模板基本

2009-07-21 09:43:36

调用UpdatePanASP.NET
点赞
收藏

51CTO技术栈公众号