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