在我写了SSO的文章以后,有几个网友希望我能提一提跨domain的SSO的实现方法。其实,它的实现方法有很多,如果不象JES Access Manager那样要考虑性能和安全性的问题,我下面可以给出很简单的解决方案。
跨domain的SSO的主要难点在于浏览器如何设置不同domain的cookie。所有的cookie都有一个范围,叫domain,如“.sun.com”。这个范围规定了只有在访问相同domain的时候,浏览器才会将此cookie带上。因此,如果SSO服务的domain和Web应用的domain不相同的情况下,就算当前浏览器已经登录过SSO的服务,Web应用的Agent(Filter)也不能知道。因为SSO服务给此浏览器设置的cookie是Domain A的,在访问domain B的时候,这个cookie是不会带去的。
另外,在servlet的API中,在设置cookie的时候是可以选择此cookie生效的domain--setDomain()方法。知道这个以后,请看下图的解释
如上图,我们只需要将SSO服务稍微改动就能完成跨domain的SSO的功能。
让我们一步步来看是如何实现的:通过步骤1、2,假设我们访问过Domain A中的应用1,并且登录了SSO,获得了Domain A的cookie。步骤3在访问Domain B的应用2的时候,显然此Web应用2的Agent不会发现这个cookie,因为这是Domain B。
步骤4,Web应用2的Agent给浏览器发出重新定向到SSO登录页面的指令(详细过程和原理请阅读文章本身)。步骤5,浏览器去访问SSO的登录页面。到此为止,和原来的实现过程都没有什么变化。
但是,SSO在返回给浏览器登录页面之前,可以执行一个附加的操作,检查一下当前请求是否带有cookie。值得注意的是,在这次访问当中,浏览器的确是将先前登录成功的cookie带来了,因为这是Domain A。在这个附加的操作中,我们可以去判断这个cookie是否真的有效。
如果这个cookie真的有效,这个附加的操作需要做的是给浏览器再设置一个cookie,cookie的名字和数值都和原来一样,domain的范围设置为"Domain B",并且让浏览器重新定向到刚才的请求上(Web应用2的请求)。这个请求的URL可以从“goto”的参数中获得(详细过程和原理请阅读文章本身)。
浏览器再次访问Web应用2的时候,它所希望的cookie就已经在了。
从用户的角度说,可能会发现浏览器有几次闪动和交互,但这都是自动的。
http://yuwang881.blog.sohu.com/3632369.html#comment
分享到:
相关推荐
跨平台跨服务器跨网站SSO(单点登录)方案的DEMO 跨平台跨服务器跨网站SSO(单点登录)方案的DEMO 跨平台跨服务器跨网站SSO(单点登录)方案的DEMO
SSO_same_domain.rar
跨服务器登录验证(单点登录SSO)的过程和Java实现.pdf
跨域点单登录源码SSO_cross_domain
spring boot整合spring security 实现SSO单点登陆 完整DEMO. ...2、先后启动SsoServer、sso-resource、sso-client1、sso-client2 3、访问http://sso-taobao:8083/client1/ 或 http://sso-tmall:8084/client2/
sso跨域
2. Loong SSO支持 客户端 跨服务器、跨域名、跨应用、跨开发语言 3. SSO客户端调用, 支持各种 能用于WEB开发的 语言(比如 perl、PHP、Ruby、Python、Java)等等语言 4. SSO客户端开发简单,修改量非常小。 只要修改...
跨平台跨服务器跨网站SSO(单点登录)的方案
SSO的简单实现SSO的简单实现SSO的简单实现
所有应用系统能够识别和提取Token信息要实现SSO的功能,让用户只登录一次,就必须让应用系统能够识别已经登录过的用户。应用系统应该能对Token进行识别和提取,通过与认证系统的通讯,能自动判断当前用户是否登录过...
cross-domain-sso:跨域单点登录案例研究
用户SSO接口API源代码,适用于各终端联合登陆,支持用户名密码,短信,crc校验 包含数据库脚本(Oracle,MySql) ... |__SSO.Domain |__SSO.ManageFacade |__SSO.Management |__SSO.Open |__SSO.SDK |__SSO.UTILS
sso单点登录sso单点登录sso单点登录sso单点登录
一个实现SSO方案的构想SSO单点登陆解决方案
单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
Laravel开发-sso Laravel 4的SSO包。
SSO开源项目,基于https的,大家可以在网上搜索研究一下!
自己动手写sso java 简单实现 使用 目前流行的 springboot 做基础
跨服务器登录验证(单点登录SSO)过程和Java实现
sso各子系统在集成sso后可通过sso client 端提供的一下接口获取sso数据