基于 OAuth2.0 协议的单点登录系统方案设计
一、什么是单点登录?
单点登录(Single Sign On),简称为 SSO,是比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。---- 《百度百科》
换而言之,在公司业务逐渐壮大的过程中,开发了很多的子系统。每个子系统都有自己的用户的登录、注册模块,为了能够在公司内部统一用户登录授权功能,诞生了一个统一的用户登录认证系统,这个系统就可以称之为单点登录系统。
二、什么是 OAuth2.0 协议?
OAuth 是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。主要是用于在第三方平台上进行的用户授权,常见的一些场景,例如:QQ、微博、微信的授权登录。第三方开发平台的授权接入,例如:Shopify、速卖通、亚马逊等。
三、单点登录解决什么问题?
假设,当我们的 ERP 系统功能模块越来越多的时候,后期可能会拆分出产品库存系统、财务系统、订单系统、工单系统等,那是不是意味着每个系统都需要开发一套登录注册功能呢?如果每个系统有一套自己的用户体系,就会出现用户在使用的时候,需要重复注册、重复登录、重复记住对应的账号密码,一旦子系统多达十几个的时候,对于用户来说这种情况,显然是不能接受的。
其次对应我们开发人员来说,很显然也不可能每个系统开发一套相同的功能,因此我们需要有一套能够统一登录、注册、用户管理、权限等功能的系统。那么这样一套系统就是,今天要分享的单点登录系统。单点登录系统,能够让我们只需拥有一个账号,便可以访问任意的子系统,类似于我们拥有了一张通行证,行便天下,畅通无阻。
四、单点登录交互时序图

五、案例演示
1、授权界面

2、系统地址
SSO 系统:http://www.sso.com/
A 业务系统:http://www.a.com
B 业务系统:http://www.b.com
3、关键代码

六、Ouath 2.0 授权模式的参数说明
1、客户端传递的参数
| 参数 | 描述 |
|---|---|
| response_type | 表示授权类型,必选项,此处的值固定为"code" |
| client_id | 表示客户端的ID,必选项 |
| redirect_uri | 表示重定向URL,可选项 |
| scope | 表示申请的权限范围,可选项 |
| state | 表示客户端的当前状态,可以指定任意值,认证服务器会原封不动地返回这个值。 |
2、授权系统回调给客户端的参数
| 参数 | 描述 |
|---|---|
| code | 表示授权码,必选项。 |
| state | 如果客户端的请求中包含这个参数,认证服务器的回应也必须一模一样包含这个参数。 |
3、客户端向授权系统申请 Token 所需参数
| 参数 | 描述 |
|---|---|
| grant_type | 表示使用的授权模式,必选项,此处的值固定为"authorization_code"。 |
| code | 表示获得的授权码,必选项。 |
| redirect_uri | 表示重定向URI,必选项,且必须与上面中的该参数值保持一致。 |
| client_id | 表示客户端ID,必选项。 |
| client_secret | 表示客户端密钥,必选项。 |
4、授权系统返回给客户端的参数
| 参数 | 描述 |
|---|---|
| access_token | 表示访问令牌,必选项。 |
| token_type | 表示令牌类型,该值大小写不敏感,必选项,可以是bearer类型或mac类型。 |
| expires_in | 表示过期时间,单位为秒。如果省略该参数,必须其他方式设置过期时间。 |
| refresh_token | 表示更新令牌,用来获取下一次的访问令牌,可选项。 |
| scope | 表示权限范围,如果与客户端申请的范围一致,此项可省略。 |
七、总结
单点登录系统旨在打通各个子系统的用户体系,实现多场景下的免登。同时,企业内部也统一了账号体系,实现了用户数据的聚合。减少了用户的反复登录,提升了产品的体验。从系统的层面,减少了系统的重复建设,降低了研发成本。从安全层面,统一管理用户账号,提升了用户账号及权限的安全性。
本次分享的主要目的,旨在让大家了解单点登录的思想,以及 Ouath2.0 协议在实际场景中的应用。单点登录只是一种解决问题的手段或技术解决方案,Oauth2.0 协议是一套授权的标准。那么单点登录系统,就是这两者的结合。附代码 https://github.com/yxhsea/single-point.git
基于 OAuth2.0 协议的单点登录系统方案设计的更多相关文章
- oauth2.0实现sso单点登录的方式和相关代码
SSO介绍 什么是SSO 百科:SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他 ...
- QQ联合登录(基于Oauth2.0协议)
1. 获取授权码Authorization Code https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id= ...
- API开放平台接口设计-------基于OAuth2.0协议方式
1,简介OAuth http://www.ruanyifeng.com/blog/2019/04/oauth_design.html OAuth 是什么? http://www.ruanyifeng. ...
- 对OAuth2.0协议的理解和测试demo
1. 什么是OAuth OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容. OAuth ...
- 单点登录系统(SSO)的开发思路
单点登录并不是一个新鲜的玩意儿,比较官方的解释是企业业务整合的解决方案之一,通俗来讲SSO就是一个通用的用户中心,国内比较流行的UCenter就是一套单点登录解决方案.而近期以CSDN明文存储用户密码 ...
- 多平台的网站实现单点登录系统(SSO)的开发思路 让你的会员中心更加统一(参考资料)
单点登录并不是一个新鲜的玩意儿,比较官方的解释是企业业务整合的解决方案之一,通俗来讲SSO就是一个通用的用户中心,国内比较流行的UCenter就是一套单点登录解决方案.而近期以CSDN明文存储用户密码 ...
- IdentityServer4之SSO(基于OAuth2.0、OIDC)单点登录、登出
IdentityServer4之SSO(基于OAuth2.0.OIDC)单点登录.登出 准备 五个Web站点: 1.localhost:5000 : 认证服务器.2 ...
- 单点登录系统实现基于SpringBoot
今天的干货有点湿,里面夹杂着我的泪水.可能也只有代码才能让我暂时的平静.通过本章内容你将学到单点登录系统和传统登录系统的区别,单点登录系统设计思路,Spring4 Java配置方式整合HttpClie ...
- 使用OAuth2.0协议的github、QQ、weibo第三方登录接入总结
目录 第三方接入总结 OAuth2.0介绍 github OAuth2.0登录接入 国内第三方应用商SDK使用 微博SDK 腾讯QQ SDK passport.js插件使用 安装 相关中间件.路由 返 ...
- 第三方登录,一般都是遵循OAuth2.0协议。
1. QQ登录OAuth2.0协议开发流程 1.1 开发流程 申请接入,获取appid和appkey; 开发应用,设置协作者账号,上线之前只有协作者才能进行第三方登录 放置QQ登录按钮(这个自己可以用 ...
随机推荐
- 前端使用 Konva 实现可视化设计器(4)
给上一章做一个补充,就是实现通过上下左右按键移动所选节点. 继续求 Star ,希望大家多多一键三连,十分感谢大家的支持~ 创作不易,Star 50 个,创作加速! github源码 gitee源码 ...
- Prometheus之grafana(No data to show)
一.问题现象 1.grafana添加数据源后获取不到监控数据(No data to show) 2.prometheus以下报错 二.问题原因 服务器与浏览器时间不同步的原因,服务器端配置NTP服务和 ...
- 将 Github Pages 个人博客录入搜索引擎(以 Bing 为例)
目录 关于 Bing Webmaster Tools 步骤一:登录 步骤二:添加网站 步骤三:验证网站 步骤四:添加网站地图 验证 & 总结 相关链接 笔者最近准备将 Gitee Pages ...
- 物联网浏览器(IoTBrowser)-Java快速对接施耐德网络IO网关
前一段时间有个Java技术栈的朋友联系到我,需要快速对接现有的无人值守称重系统,这里的对接是指替代现有系统,而非软件层面的对接,也就是利用现有的硬件开发一套替代现有软件的自动化系统.主要设备包括地磅秤 ...
- 鸿蒙HarmonyOS实战-ArkUI组件(Canvas)
一.Canvas Canvas组件是一种图形渲染组件,它提供了一个画布(canvas),开发者可以在上面绘制各种图形.文本等.Canvas组件通常用于创建游戏.数据可视化等需要动态绘制图形的应用程序. ...
- 力扣141(Java)-环形链表(简单)
题目: 给你一个链表的头节点 head ,判断链表中是否有环. 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 为了表示给定链表中的环,评测系统内部使用整数 pos ...
- 力扣1668(java&python)-最大重复子字符串(简单)
题目: 给你一个字符串 sequence ,如果字符串 word 连续重复 k 次形成的字符串是 sequence 的一个子字符串,那么单词 word 的 重复值为 k .单词 word 的 最大重复 ...
- 力扣467(java)-环绕字符串中唯一的子字符串(中等)
题目: 把字符串 s 看作是 "abcdefghijklmnopqrstuvwxyz" 的无限环绕字符串,所以 s 看起来是这样的: "...zabcdefghijklm ...
- [FE] G2Plot 更新图表的两种方式
第一种是使用 G2Plot 对象上的 changeData 方法,如果不涉及到全局 title 等这些的更改,可以采用这种方式. 也就是说,只有纯数据方面的变动,使用 changeData 更新图表数 ...
- SpringBoot项目实现日志打印SQL明细(包括SQL语句和参数)几种方式
前言 我们在开发项目的时候,都会连接数据库.有时候遇到问题需要根据我们编写的SQL进行分析,但如果不进行一些开发或者配置的话,这些SQL是不会打印到控制台的,它们默认是隐藏的.下面给大家介绍几种常用的 ...