cookies共享 sso_asp.net forms 表单验证 实现跨域共享cookie(即SSO,单点登录(在二级域名下))...

1.前提:

需要做一个单点登录,使用asp.net自带的表单验证(FormsAuthentication)

配置文件怎么写,如下(基本的):

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

6

7

8

9

2.因为asp.net内部为了安全,所有的验证后写出的cookie值都是经过加密的,所有我们需要让验证站和分站的加密解密方式一样,可以通过配置文件指定,所以分别在验证站和分站的配置文件中的节点中添加以下节点(此处的validationKey和decryptionKey是网上找的,可以根据服务器生成)

1

3 decryptionKey="8B6697227CBCA902B1A0925D40FAA00B353F2DF4359D2099"

4 validation="SHA1"/>

decryption属性:用于指定Forms验证下cookie的加密算法,取值有Auto,AES或3DES,默认为Auto (ASP.NET会根据Web服务器的性能选择最佳加密算法)。

validation属性:用于指定对验证cookie进行Hash与加密的算法,可取值为AES,MD5,SHA1和3DES。

descryptionKey属性与validationKey属性:分别表示对验证cookie进行加密的密钥与Hash运算的验证码。

另外,上述配置中:

AutoGenerate:表示ASP.NET将产生随机密钥,并将其存储在LSA(本地独立存储)

IsolateApps表示将为Web服务器每个应用程序创建唯一的密钥。

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();

}

原文:http://www.cnblogs.com/JsonYang/p/3926895.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值