`
阅读更多

在我写了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()方法。知道这个以后,请看下图的解释

10c86bad976.jpg

如上图,我们只需要将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_same_domain

    例如,跨站脚本攻击(XSS)可能导致Cookie被窃取,破坏SSO的安全性。因此,必须启用HTTPOnly Flag来防止JavaScript访问Cookie,同时使用HTTPS确保通信过程中的信息安全。 8. **会话管理**:同域SSO环境中,会话管理...

    sso单点登录demo

    1. **相同域名的SSO** (`sso_same_domain`): 在同一域名下实现SSO,通常比较直接,因为浏览器会自动共享相同的Cookie。在这个示例中,可能采用了共享Session ID或自定义Token的方式。用户首次登录后,服务器会返回...

    SSO单点登入,使用cookie实习(Struts2)

    SSO(Single Sign-On)单点登录是一种身份验证机制,允许用户在一次登录后访问多个相互关联的应用...在Struts2框架下,通过合理的设计和编程,我们可以构建一个高效、安全的SSO解决方案,实现跨系统的无缝登录体验。

    sso 同域之下简单模拟

    3. JavaScript跨页面通信:通过JavaScript可以实现不同页面间的数据共享,从而实现SSO。 三、SSO客户端(ssoclient) "ssoclient"可能是一个实现SSO登录功能的客户端代码,可能包括: 1. 检测用户登录状态:通过...

    关于单点登录 sso的思路

    通过合理设置Cookie的domain和生命周期,以及正确处理Token的生成、传递和验证,可以实现高效、安全的SSO流程。 在实际应用中,还需要考虑安全性问题,如防止跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等,以及...

    Web前端黑客技术揭秘(Web2Hack.org)_(i)7.6.5 跨子域:document.domain技巧1

    然而,有时候为了实现特定功能,如单点登录(SSO)或资源共享,开发者会利用`document.domain`属性来打破这种限制,允许跨子域的通信。本节主要探讨的是如何利用`document.domain`技巧进行跨子域操作,并结合一个...

    phpBB Multiple Domain SSO:phpbb 多域单点登录与 wordpress 插件-开源

    这些代码修改的作用是为 phpbb 和其他站点/代码/应用程序创建跨不同、多个域的单点登录。 这些修改使用 phpbb 用户表、会话等。 它的作用是通过使用 iframes 为每个域设置 cookie,它加载一些 connect.php 文件,该...

    浅谈谁都能看懂的单点登录(SSO)实现方式(附源码)

    通过设置cookie的domain属性为顶级域名,可以实现cookie的跨子域名共享。例如,如果cookie的domain设置为"***",则所有如***和***的二级域名都可以访问到这个cookie。服务器端通过验证共享的cookie来实现身份的验证...

    sso跨域写cookie的一段js脚本(推荐)

    需要注意的是,这种方式可能受到浏览器安全策略的影响,例如CORS(跨源资源共享)策略,以及对第三方Cookie的限制。此外,对于某些安全敏感的应用,这种做法可能需要配合更复杂的认证和授权策略。在实际应用中,确保...

    PHP编程 SSO详细介绍及简单实例

    SSO(Single Sign-On)是身份验证领域的一个关键概念,它允许用户在一个系统上登录后,无需再次输入凭证即可访问其他相互信任的系统。在PHP编程中,实现SSO可以帮助提高用户体验,尤其是在拥有多个子域或独立应用的...

    asp.net 跨子域共享SESSION

    在实际应用中,通常会结合单点登录(Single Sign-On, SSO)系统来实现跨子域共享Session。SSO允许用户在一个子域登录后,其他子域无需再次登录即可访问。实现SSO时,Session共享是关键组成部分,通常会结合Cookie或...

    JEECG 单点登录集成文档(kisso集成)

    sso.cookie.domain=.*** ``` 5. 客户端集成: - 客户端配置文件中同样需要注入Kisso初始化bean,并进行环境配置选择设置,如开发模式、测试模式、生产模式等。 - 配置文件还定义了请求拦截器,以实现对请求的...

    sohu单点登录的解决方案

    3. **跨站点登录执行**:通过`http://passport.sohu.com/sso/crossdomain_all.jsp?action=login`返回的脚本,进一步请求`http://passport.sohu.com/sso/crossdomain.jsp?action=login&domain=17173.com`,其中17173....

    SpringBoot实现用户统一管理与单点登陆.pdf

    - **Cookie跨域共享**:通过设置`SameSite`和`Domain`属性,确保用户登录状态在多个子系统间无缝传递。 - **鉴权流程**:用户登录SSO后,获取的认证令牌(Token)被存储在Cookie中,后续请求会携带此Token进行身份...

    code_WE_

    3. **sso-cross-domain**:这暗示了SSO解决方案可能跨域处理,即允许用户在一个域登录后可以在其他关联域中自动登录。这通常涉及到浏览器的跨域策略和CORS(跨源资源共享)配置。 4. **sso-jwt**:JWT(JSON Web ...

    ASP.NET 单点登录demo

    - **配置Cookie属性**:确保Cookie的`Domain`属性设置为所有应用共享的域,以便跨子域共享。 - **验证票证**:在每个子应用的Global.asax文件中,重写`Application_AuthenticateRequest`事件,检查Cookie是否存在...

    Weblogic操作手册

    - **Domain**是WebLogic Server中的基本管理单位,包含了运行在单一操作系统或跨多个系统的WebLogic实例。在创建Domain时,需要定义域的名称、管理服务器、受管服务器、安全设置等核心参数。 - Domain配置包括定义...

    其他系统与domino系统单点登录的实现方式.docx

    本文主要探讨了如何利用Domino LTPAToken的生成方法来实现跨系统的单点登录功能,并详细介绍其实现原理与具体步骤。 #### 二、实现原理概述 本方案的核心在于通过Domino系统与统一用户的交互来实现单点登录。主要...

Global site tag (gtag.js) - Google Analytics