标签:des style blog color 使用 os io strong
1.前提:
需要做一个单点登录,使用asp.net自带的表单验证(FormsAuthentication)
配置文件怎么写,如下(基本的):
<authentication mode="Forms"> <forms loginUrl="~/user/login" enableCrossAppRedirects="true" timeout="3600" name="qz.bbs" cookieless="UseCookies" domain="qz.com" protection="All" requireSSL="false"></forms>
</authentication>
enableCrossAppRedirects:是否跨应用程序使用
name:指定验证通过后写到浏览器的cookie名称,同时验证是否通过时,也是读取该cookie名,取得值,然后解密赋值给 User.Identity.Name
domain:指定表单验证下发的cookie的作用域,一定要指定为一级域名(如果分站点为二级域名),这样才能共享cookie
站点在同一一级域名下,①passport.qz.com --- 验证站点
②site1.qz.com ---- 分站点一
③site2.qz.com ---- 分站点二
2.简介
在表单验证中,验证通过时会写一个cookie到浏览器,但是这个cookie是经过加密了的,如果没有指定用什么加密算法会根据当前服务器的机器自动选择,所以我们需要为验证站点指定用什么算法,同时在分站中也需要指定,这样在分站获取到验证cookie的值后,才能正确的解密,还原为相同的值
3.具体
1.在验证站中和分站中都指定表单验证,指定验证后的cookie的名称和Domain(验证站点和分站的cookie名称必须一致,这样分站才能获取验证站的cookie值)
1 <!-- 2 通过 <authentication> 节,可配置 3 ASP.NET 用于识别进入用户的 4 安全身份验证模式。 5 --> 6 <authentication mode="Forms"> 7 <forms loginUrl="~/user/login" enableCrossAppRedirects="true" timeout="3600" name="qz.bbs" cookieless="UseCookies" domain="qz.com" protection="All" requireSSL="false"> 8 </forms> 9 </authentication>
2.因为asp.net内部为了安全,所有的验证后写出的cookie值都是经过加密的,所有我们需要让验证站和分站的加密解密方式一样,可以通过配置文件指定,所以分别在验证站和分站的配置文件中的<system.web>节点中添加以下节点(此处的validationKey和decryptionKey是网上找的,可以根据服务器生成)
1 <machineKey 2 validationKey="282487E295028E59B8F411ACB689CCD6F39DDD21E6055A3EE480424315994760ADF21B580D8587DB675FA02F79167413044E25309CCCDB647174D5B3D0DD9141" 3 decryptionKey="8B6697227CBCA902B1A0925D40FAA00B353F2DF4359D2099" 4 validation="SHA1"/>
另外,上述配置中:
4.算法生成
AES算法需要一个64位的十六进制字符随机序列,SHA1算法使用一个128位的十六进制随机序列,我们可以通过这样的代码来生成所需的随机序列:
string GetKey(int length)
{
byte[] buffer = new byte[length / 2];
RNGCryptoServiceProvider provider = new RNGCryptoServiceProvider();
provider.GetBytes(buffer);
StringBuilder builder = new StringBuilder(length);
for (int i = 0; i < buffer.Length; i++)
{
builder.Append(string.Format("{0:X2}", buffer[i]));
}
return builder.ToString();
}
asp.net forms 表单验证 实现跨域共享cookie(即SSO,单点登录(在二级域名下)),布布扣,bubuko.com
asp.net forms 表单验证 实现跨域共享cookie(即SSO,单点登录(在二级域名下))
标签:des style blog color 使用 os io strong
原文地址:http://www.cnblogs.com/JsonYang/p/3926895.html