Spring Security基于Oauth2的SSO单点登录怎样做?一个注解搞定
一、说明
单点登录顾名思义就是在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统,免除多次登录的烦恼。本文主要介绍 同域 和 跨域 两种不同场景单点登录的实现原理,并使用 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客户端)也需要实现以下逻辑:
1、拦截请求判断登录状态
2、与 UAA授权中心 通过 Oauth2授权码模式 交互完成登录/单点登录
3、保存用户登录信息
以上逻辑只需使用一个 @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
相关教程阅读推荐:https://www.roncoo.com/view/132
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
不违反美国法律的情况下,如何从暗网收集威胁情报
日前,美国发布了《Legal Considerations when Gathering Online Cyber Threat Intelligence and Purchasing Data from Illicit Sources1》(从非法来源收集网络威胁情报和购买数据时的法律参考指南),为信息安全从业人员如何在不违反美国法律的情况下开展威胁情报收集,提供了一些参考。 指南是根据美国司法部各部门、联邦调查局、美国特勤局和美国财政部外国资产控制办公室的意见而编制的。 内容的重点放在信息安全从业人员的网络威胁情报工作,其中也涉及了讨论和计划计算机犯罪并买卖被盗数据的在线论坛。它还考虑了个人想在黑市中购买恶意软件,安全漏洞或他们自己的被盗数据(或在数据所有者授权下属于他人的被盗数据)的情况。 威胁情报收集者如果不注意的话,很容易违反美国联邦刑法。所以指南的目的就使让信息安全人员合法规范地开展情报收集。 能做什么 被动收集网络威胁情报 合法访问论坛(通过合法获取登录凭据,用于完全伪造的角色) 在论坛上提问和征求意见(但要记录这样做只是为了收集信息,而不是犯罪) 不能做什么 非法访问论坛...
- 下一篇
md0 发布 1.1.0,一个丑陋的 markdown 处理器
md0是一个交换 markdown处理成 html的工具。 距离上次发布快半年了,最近挤了点时间,把项目分模块开发,使用 webpack工具来打包,并且添加了一些实用的功能。 选项添加 `render` 支持,可以自定义对一些内容的渲染 添加 CLI 支持 CLI 模式下,支持将本地图片以 base64 数据格式嵌入 目前,md0支持通过以下方式使用: npm npm install md0 dn https://cdn.jsdelivr.net/npm/md0/dist/md0.js cli md0 <input-file> [output-file] [--options] md0使用很简单,直接如下就能得到html 内容了 const html = md0(markdown) 可以移步https://hyjiacan.github.io/md0/参观一下
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果