Spring Security基于Oauth2的SSO单点登录怎样做?一个注解搞定
2020-07-12 16:41
155 查看
一、说明
单点登录顾名思义就是在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统,免除多次登录的烦恼。本文主要介绍
同域和
跨域两种不同场景单点登录的实现原理,并使用
Spring Security来实现一个最简单的跨域
SSO客户端。
二、原理说明
单点登录主流都是基于共享
cookie来实现的,下面分别介绍
同域和
跨域下的两种场景具体怎样实现共享
cookie的
2.1. 同域单点登录
适用场景:都是企业自己的系统,所有系统都使用同一个一级域名通过不同的二级域名来区分。
举个例子:公司有一个一级域名为
zlt.com,我们有三个系统分别是:门户系统(sso.zlt.com)、应用1(app1.zlt.com)和应用2(app2.zlt.com),需要实现系统之间的单点登录,实现架构如下:
核心原理:
- 门户系统设置
Cookie
的domain
为一级域名也就是zlt.com
,这样就可以共享门户的Cookie
给所有的使用该域名(xxx.zlt.com
)的系统 - 使用
Spring Session
等技术让所有系统共享Session
- 这样只要门户系统登录之后无论跳转应用1或者应用2,都能通过门户
Cookie
中的sessionId
读取到Session
中的登录信息实现单点登录
2.2. 跨域单点登录
单点登录之间的系统域名不一样,例如第三方系统。由于域名不一样不能共享
Cookie了,这样就需要通过一个单独的授权服务(UAA)来做统一登录,并基于共享UAA的
Cookie来实现单点登录。
举个例子:有两个系统分别是:应用1(webApp.com)和应用2(zlt.com)需要实现单点登录,另外有一个UAA授权中心(sso.com),实现架构如下:
核心原理:
- 访问系统1判断未登录,则跳转到UAA系统请求授权
- 在UAA系统域名
sso.com
下的登录地址中输入用户名/密码完成登录 - 登录成功后UAA系统把登录信息保存到
Session
中,并在浏览器写入域为sso.com
的Cookie
- 访问系统2判断未登录,则跳转到UAA系统请求授权
- 由于是跳转到UAA系统的域名
sso.com
下,所以能通过浏览器中UAA的Cookie
读取到Session
中之前的登录信息完成单点登录
2.3. 基于Oauth2的跨域单点登录流程
关于Oauth2的授权码模式这里就不做介绍了,自行找资料了解
三、Spring Security实现
Oauth2单点登录除了需要授权中心完成统一登录/授权逻辑之外
基于
Spring Security实现的UUA统一授权中心可以参考:https://gitee.com/zlt2000/microservices-platform/tree/master/zlt-uaa
各个系统本身(sso客户端)也需要实现以下逻辑:
- 拦截请求判断登录状态
- 与
UAA授权中心
通过Oauth2授权码模式
交互完成登录/单点登录 - 保存用户登录信息
以上逻辑只需使用一个
@EnableOAuth2Sso注解即可实现
SpringBoot配置如下:
下图是访问
sso客户端时
@EnableOAuth2Sso注解与
UAA授权中心通过
Oauth2授权码模式交互完成单点登录的步骤
请结合上面单点时序图中单点登录系统2的1~5步
PS:如果系统用的不是
Spring Security怎么办?理解原理自行实现
四、demo下载地址
https://gitee.com/zlt2000/microservices-platform/tree/master/zlt-demo/sso-demo
扫码关注有惊喜!
相关文章推荐
- Spring Security基于Oauth2的SSO单点登录怎样做?一个注解搞定
- Spring Security基于Oauth2的SSO单点登录怎样做?一个注解搞定
- 前后端分离基于Oauth2的SSO单点登录怎样做?
- Spring Security基于JWT实现SSO单点登录
- 基于Spring Security OAuth2.0实现单点登录SSO
- Spring Security基于JWT实现SSO单点登录详解
- Spring Security 自动踢掉前一个登录用户,一个配置搞定!
- SSO单点登录在互联网电商应用中的解决方案(基于CAS的改造)
- 基于Spring Security的AJAX请求需要登录的解决方案
- 基于CAS SHIRO LDAP 的SSO单点登录
- 基于.Net的单点登录(SSO)实现解决方案
- 从0开始写一个基于注解的轻量级分布式RPC框架(2)框架整体结构
- Spring Security调研记录【五】--基于Cas实现单点登录
- 基于cookie的SSO单点登录系统
- 基于.Net的单点登录(SSO)解决方案
- 基于Swift语言开发微信、QQ和微博的SSO授权登录代码分析
- SSO 基于Cookie+fliter实现单点登录 实例解析(一)
- 基于Swift语言开发微信、QQ和微博的SSO授权登录代码分析
- 基于Shibbloet实现的SSO单点登录
- 一个基于注解的 HQL 生成器