加密MachineKey

ASP.NET中设置MachineKey可以很轻松的实现SSO,可以在所有ASP.NET站点中添加如下配置:
<machineKey validationKey="XXXXXX" decryptionKey="XXX" validation="SHA1" />
validationKey可以为视图状态、身份验证Cookie、Session等重要的信息添加杂乱信息以防止重要信息被篡改。
为了防止validationKey和decryptionKey以明文的方式进行显示,可以使用ProtectSection方法对machineKey配置节进行加密。
1、在Web.config中添加原始的配置,如:
<machineKey validationKey="XXXXXX" decryptionKey="XXX" validation="SHA1" />
2、通过程序对system.web/machineKey节进行加密和解密
加密方式如下:
            Configuration config = WebConfigurationManager.OpenWebConfiguration("/");
            ConfigurationSection machineKeySection 
= config.GetSection("system.web/machineKey");
            machineKeySection.SectionInformation.ProtectSection(
"RSAProtectedConfigurationProvider");
            machineKeySection.SectionInformation.ForceSave 
= true;
            config.Save();
解密方式如下:
            Configuration config = WebConfigurationManager.OpenWebConfiguration("/");
            ConfigurationSection machineKeySection 
= config.GetSection("system.web/machineKey");
            machineKeySection.SectionInformation.UnprotectSection();
            machineKeySection.SectionInformation.ForceSave 
= true;
3、通过程序加密就会得到类拟:
        <machineKey configProtectionProvider="RsaProtectedConfigurationProvider">
            
<EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
                xmlns
="http://www.w3.org/2001/04/xmlenc#">
                
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
                
            
</EncryptedData>
        
</machineKey>
这样的配置,你只要把这段配置复制到各个需要SSO的站点的Web.config就可以了,系统在运行过程中会自动进行解密
如果想变回原来的明文显示可以执行解密的相反过程就行
注意:其中的OpenWebConfiguration("/");表示打开站点根目录下的web.config,其它情况可参考如下:
Using the Management API
posted @ 2008-01-28 13:45  chenjunbiao  阅读(1222)  评论(0编辑  收藏  举报