很多时候,如果没有理解原理,做起事来会感觉无从下手、困难重重,一旦把原理想清楚了,做起来就会从容不迫。
切入正题:在相同域名下实现统一认证单点登录比较简单,基于Cookie结合共享Redis就可以轻松实现。在同一个域名下,不同的系统共享相同的cookie,认证中心可以将会话ID(服务器的sessionId或者自己颁发的token)存入Cookie中,应用系统获取到会话ID后请求Redis校验登陆态即可。当然为了安全起见,一般应用系统不能直接访问Redis,由认证中心提供代理接口供应用系统调用获取登录信息,代理接口可以完成安全检查和白名单准入。
在跨域时,不同域名之间不能共享Cookie,造成了登陆态无法共享。为了解决Cookie不能共享的问题,必须要想办法将认证中心的会话ID传给跨域的第三方应用系统。假设认证中心所在域名为A域,第三方应用系统所在域名为B域,最好能直接把认证中心完成登陆认证的会话ID写在B域名下的Cookie中,这样B域名下的所有应用系统都可以共享登陆态。为了实现此目标,我们在A域名的认证中心系统(或者另外提供一个代理系统)中提供一个可以跨域访问的URL地址,B域下的系统使用AJAX通过JSONP访问此URL地址,在访问请求头中Refer会记录B域信息,URL接口首先校验访问来源是否合法,然后判断A域下是否存在已登录的认证中心的服务器会话ID,如果用户在认证中心完成登录认证,此URL在返回信息中提供认证中心的会话ID,否则返回空值。AJAX拿到会话ID不为空时(为空就跳去认证中心做登录认证),传递给B域下的应用系统,系统后台通过认证中心提供的代理接口获取与会话ID相关的登录信息,如果拿到则认为用户已登录,将用户信息返回给前端页面并在B域下的Cookie中写入认证中心的会话ID,如果拿不到则页面跳转至认证中心登录。此时B域名下的Cookie中已写入认证中心的会话ID,B域下的所有应用系统都可以实现单点登录会话共享了。以此类推,如果有C域、D域,都可以按此方式接入统一认证中心。
所以跨域实现统一登录态的核心在于:1、认证中心要提供一个可跨域访问的URL接口;2、B域要能在自己的Cookie中写入已登录用户的会话ID;3、B域下的系统能通过后台访问到A域名下Redis的代理接口,即网络策略要通,否则无法校验用户是否真的登录了。
附图如下:
相关推荐
因为后台系统没有登录功能,但是公司要求统一登录,登录认证统一使用.net项目组的认证系统。那就意味着做单点登录咯,至于不知道什么是单点登录的同学,建议去找一下万能的度娘。 刚接到这个需求的时候,老夫心里便...
通过设置CORS(Cross-Origin Resource Sharing)或者使用JSONP(JSON with Padding)等技术,我们可以实现完全跨域,允许来自不同源的请求访问SSO服务,确保用户在任何地方都能享受到统一的登录体验。 6. **单点...
在Java开发环境中,实现完全跨域的单点登录是一项重要的技术挑战,涉及到多个领域的知识,包括HTTP协议、Cookie管理、会话跟踪、授权机制等。本篇文章将深入探讨这一主题,并基于给定的标签"SSO"、"Java"和"单点登陆...
统一登录平台通过SSO技术解决了跨域登录问题,实现了用户在一个系统登录后,可免密访问所有关联系统。这一方案减少了开发成本,提升了用户使用体验,同时增强了系统的整体安全性。在实际应用中,还需要考虑如安全...
这篇博客“基于Spring和Spring MVC实现可跨域访问的REST服务”深入探讨了如何使用这两个流行的Java框架来创建这样的服务。Spring作为核心框架提供依赖注入和整体架构支持,而Spring MVC作为其Web模块,专门用于构建...
### 基于Java+EE的跨域单点登录系统的研究与实现 #### 摘要及背景介绍 本文档探讨的主题是“基于Java+EE的跨域单点登录系统的研究与实现”,主要关注如何利用Java+EE技术构建一套有效的跨域单点登录(Single Sign-...
根据给定文件内容,本文将详细介绍Shibboleth技术、高校身份认证联盟CARSI、CALIS统一认证云服务以及它们之间的跨域认证集成模式。 Shibboleth技术: Shibboleth是一个开源项目,属于Internet2/MACE项目的一部分。...
本文档介绍了在SpringBoot应用中实现跨域资源共享的5种方式,包括使用CorsFilter、重写WebMvcConfigurer、使用注解@CrossOrigin、手动设置响应头以及在SpringBoot 2.4.x中对@CrossOrigin的支持情况。 首先,通过...
可以将book.aa.com用iframe添加到 www.aa.com的某个页面下,在www.aa.com和iframe里面都加上document.domain = "aa.com",这样就可以统一域了,可以实现跨域访问。就和平时同一个域中镶嵌iframe一样,直接调用里面的...
跨域SSO是指用户可以在不同的域名之间实现无缝切换而无需重新登录的过程。然而,在实际操作过程中会遇到以下挑战: - **Cookie不可共享**:不同域名下的Cookie无法相互访问。 - **安全性考量**:确保数据传输过程中...
它提供了一个统一的登录界面,处理所有应用的认证请求。 3. **票据交换(Ticket Granting Ticket, TGT)**: - 当用户首次登录时,CAS服务器会生成一个TGT,存储在服务器的内存中,并将TGT的ID(Ticket)发送给...
这样,企业可以将现有的用户认证体系接入到统一登录器网关中,实现系统的平滑过渡和升级。 其次,权限管理是确保信息安全的关键环节。一旦用户的身份得到验证,统一登录器网关将根据预先定义的权限策略判断用户是否...
本文介绍了如何在Yii2框架下实现多域名跨域同步登录和退出的功能,这对于维护用户体验和系统安全性都有很重要的作用。 Yii2是一个高级的PHP框架,用于开发全栈Web应用。它提供了一套丰富的工具和功能,用以快速开发...
在开发Web应用时,我们经常会遇到跨域问题,特别是在使用Vue...这在实现用户认证、保持登录状态等功能时特别有用。记住,跨域安全是一个重要的考虑因素,确保在实现功能的同时,也要遵循最佳实践以保护用户数据的安全。
Kisso的这种设计使得分布式服务部署、单点登录跨域访问等问题变得简单,而使用session则需要复杂的session复制机制和其他解决方案,实现起来更加困难。 JEECG智能开发平台v3的开发指南详细说明了如何集成Kisso实现...
2. **统一Session存储**: - **数据库存储**:文中提供的`Session`类示例展示了如何将Session数据存储在MySQL数据库中。这种方法适用于多台服务器或跨域情况,因为数据存储在集中式位置。但需要注意,频繁的Session...
Zuul可以作为所有微服务请求的入口,通过在Zuul中配置CORS策略,可以统一处理跨域问题。在Spring Cloud集成Zuul时,可以在ZuulFilter中添加CORS配置。 5. **Nginx解决跨域**: Nginx作为一个强大的反向代理服务器...