基于二级域名下Cookie共享的SSO

网上已经有很多基于二级域名下Cookie 共享的SSO 的解决方案,对于原理大家可能都很了解,无非就是登录一个系统,产生一个令牌保存到Client 端的cookie 中,这个cookie 是基于主域名

网上已经有很多基于二级域名下Cookie 共享的SSO 的解决方案,对于原理大家可能都很了解,无非就是登录一个系统,产生一个令牌保存到Client 端的cookie 中,这个cookie 是基于主域名的,然后再登录其它二级域名下的系统,就会直接读取主域名下的Cookie 中的令牌,不要重新登录,方面用户使用多个系统。正好做到的项目中用到这个SSO 登录验证,自己调试中遇到一些问题,以及解决方案,跟大家分享一下。

我的项目中有两个系统,域名分别是A.test.com,B.test.com(举例) ,test.com 是一级域名,A.test.com&B.test.com是二级域名。任务是要做到在A 登录后可以直接进入B 系统,B 系统会验证Cookie 的令牌信息,正确的令牌才允许访问进入系统。A 系统访问路径是http://A.test.com/x,B系统的访问路径是http://B.test.com/y。

好了,下面开始说明一下我的解决历程:

1. 编码

在A 系统登录成功后写入Cookie

....

Cookie cookie=new Cookie("token","令牌信息");//关于令牌名称可以约定一个,到时B 系统会根据这个名称去获取令牌信息,信息令牌是加密处理r 后的字符串,如何加密这里不再赘述。

....

cookie.setDomain("test.com");//是基于一级域名的

cookie.setMaxAge(1800);//设定Cookie 的有效期

response.addCookie(cookie);

,

....

2. 测试检查

通过http://A.test.com/x访问后,Cookie 目录出现一个administrator@test.com[1]的Cookie 文件,查看IE 缓存目录,有一条名为x/的记录,internet 地址为

Cookie:administrator@test.com/x,系统缓存目录地址C:/Documents and

Settings/administrator/Local Settings/Temporary Internet Files,我的是XP 系统,Cookie 目录地址C:/Documents and Settings/administrator/Cookies。

,

如果两个系统直接是基于域名跑的,http://A.test.com,http://B.test.com,就没有后面那个修改webapp name的问题了,只要确保写Cookie 时,setDomain(一级域名) ,这里是"test.com" 。

标签: