基于 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登录按钮(这个自己可以用 ...
随机推荐
- Qt5自带的日志功能,将日志输出到文件
#include "QtWidgetsApplication1.h" #include <QtWidgets/QApplication> #include <Qt ...
- NVIDIA实习
额,大意了,之前只是有想准备nvidia的实习,但是具体时间没有关注,结果这下正正好错过 这下提前细细准备一下nvidia的实习了 公众号 Cascatrix 其他经验
- openGauss2.1.0在openEuler 20.03 LTS SP2 安装后,yum无法使用的问题解决
openGauss2.1.0 在 openEuler 20.03 LTS SP2 安装后,yum 无法使用的问题解决 一.环境描述 操作系统: openEuler 20.03 LTS openEule ...
- windows下配置mask2former(facebook版)
1.安装Anaconda 2.安装PyCharm 3.创建python3.8环境(最高3.8因为有一个依赖包最高支持python3.8) 4.安装GCC 下载地址:https://sourceforg ...
- KL散度和交叉熵的对比介绍
KL散度(Kullback-Leibler Divergence)和交叉熵(Cross Entropy)是在机器学习中广泛使用的概念.这两者都用于比较两个概率分布之间的相似性,但在一些方面,它们也有所 ...
- Go语言的100个错误使用场景(61-68)|并发实践
目录 前言 9. 并发实践 9.1 context 的不恰当传播(#61) 9.2 开启一个协程但不知道何时关闭(#62) 9.3 在循环中没有谨慎使用协程(#63) 9.4 使用 select 和 ...
- CentOS 编译安装golang
一.下载go wget https://studygolang.com/dl/golang/go1.16.4.linux-amd64.tar.gz 二.解压到指定目录 tar -xvf go1.16. ...
- RabbitMQ总体介绍
历史-从开始到现在 RabbitMQ是一个Erlang开发的AMQP(Advanced Message Queuing Protocol )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求, ...
- 8k中英双语文本嵌入模型效果初探
一 模型介绍 向量模型用于生成向量表示,被广泛应用于检索.分类.聚类或语义匹配等传统的自然语言处理任务.到了大模型时代,由于上下文长度的限制,需要压缩.存储和查询大量的信息,这就需要用到向量模型对输入 ...
- ddddocr基本使用和介绍
ddddocr基本使用和介绍 摘要:在使用爬虫登录网站的时候,经常输入用户名和密码后会遇到验证码,这时候就需要用到今天给大家介绍的python第三方库ddddocr,ddddocr是一款强大的通用开源 ...