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

网上已经有很多基于二级域名下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://B.test.com/y访问后,根据读取不到这个Cookie,为了测试方便,我在Y/下的index.jsp中,写了一段代码,就是往Cookie中写一些信息,看它会保存到哪个cookie文件中,测试后发现在Cookie目录会生成一个administrator@test.com[2]的文件,然后再IE缓存有一条名y/的记录,internet地址为Cookie:administrator@test.com/y,反复访问刷新后,A和B的Cookie总会不一样,文件名分别在[1],[2]之间变换,反正就不会是一个文件。

 

3.反复分析

 

比较Cookie和缓存中文件,发现就是x&y不一至,于是动手把A下的x系统和B下的y系统的webapp name都改成统一的,再试,成功了!两个系统可以合并到一个Cookie中了。

 

4.总结

要想在两个二级域名下共享Cookie,第一,设定的cookie要设定setDomain(一级域名);第二,访问的两个系统的webapp name一至。

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

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
SSO (Single Sign-On) 单点登录是指在访问多个系统或应用程序时,用户只需登录一次就可以访问所有的系统,而无需再次输入用户名和密码。基于cookie二级域名下跨域共享是指在跨域访问的情况下,通过设置cookie域名和路径,使得不同域名下的系统能够共享登录状态。 具体来说,当用户成功登录一个系统后,该系统会生成一个包含用户登录状态的cookie,并设置cookie域名为当前系统的二级域名。然后,该cookie会被发送给浏览器保存,在用户访问其他系统时,浏览器会自动通过cookie将用户的登录状态传递给其他系统。 为了实现跨域共享,所有需要实现SSO的系统的二级域名需要设置为相同的根域名。例如,系统A的域名为a.example.com,系统B的域名为b.example.com,则它们的根域名为example.com。为了在这两个系统之间实现跨域共享,可以将cookie域名设置为.example.com,这样两个系统就可以共享同一个cookie。 当用户访问系统A时,系统A会检查是否存在含有登录状态的cookie,如果存在则表示用户已经登录,可以直接访问系统A的资源。如果用户访问系统B,系统B也会检查是否存在含有登录状态的cookie,如果存在则表示用户已经登录,可以直接访问系统B的资源。 通过基于cookie二级域名下跨域共享的方式,SSO单点登录实现了用户在不同系统间的无缝登录体验,提高了用户的使用便捷性和系统的安全性。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值