当前位置:网站首页>单点登录SSO与OAuth2 方案
单点登录SSO与OAuth2 方案
2022-06-21 23:58:00 【Cliven_】
1. SSO与OAuth2
单点登录系统 Single sign-on (SSO) : 简单来说也就是一个在登录一个系统后不需要在重复登录其他系统的一种设计思想,其中较为著名的实现时CAS系统。
OAuth2:是一个开放标准,该标准约束了一种用户让第三应用访问用户在某一个应用中的资源而无需提供用户名和密码的方式,简单来说就是一个3方应用认证和访问用户资源的一种较为规范的流程方法。
SSO 与 OAuth2没有什么可比性,SSO是一种设计思想,OAuth2是一种具体资源认证授权的协议。
我们可以设计一种机制,来实现单点登录系统,采用OAuth2协议来做用户身份认证。
2. 融合
单点登录的设计思想如下所示:
简单来说就是用一个账号登录可以登录访问所有对接的系统,用户在认证进入单点登录系统后访问其他应用不需要再次认证。
OAuth2的授权码 授权码模式,提供了一种较为安全的访问用户资源的方式,该方式需要从被登录系统中通过连接跳转到登录系统,然后通过认证和授权,再有应用系统通过Token获取用户信息,若对OAuth不熟悉的可以参考 《理解OAuth 2.0 阮一峰》
RFC6749
1.2. Protocol Flow
+--------+ +---------------+
| |--(A)- Authorization Request ->| Resource |
| | | Owner |
| |<-(B)-- Authorization Grant ---| |
| | +---------------+
| |
| | +---------------+
| |--(C)-- Authorization Grant -->| Authorization |
| Client | | Server |
| |<-(D)----- Access Token -------| |
| | +---------------+
| |
| | +---------------+
| |--(E)----- Access Token ------>| Resource |
| | | Server |
| |<-(F)--- Protected Resource ---| |
+--------+ +---------------+
4.1 Authorization Code Grant
+----------+
| Resource |
| Owner |
| |
+----------+
^
|
(B)
+----|-----+ Client Identifier +---------------+
| -+----(A)-- & Redirection URI ---->| |
| User- | | Authorization |
| Agent -+----(B)-- User authenticates --->| Server |
| | | |
| -+----(C)-- Authorization Code ---<| |
+-|----|---+ +---------------+
| | ^ v
(A) (C) | |
| | | |
^ v | |
+---------+ | |
| |>---(D)-- Authorization Code ---------' |
| Client | & Redirection URI |
| | |
| |<---(E)----- Access Token -------------------'
+---------+ (w/ Optional Refresh Token)
通常来说我们会把 认证服务 与 资源服务 整合到一起,若我们把上述过程用时序图绘制出来,效果如下:

通过OAuth2协议通常来说是虚拟用户先访问目标应用系统的登录页,通过登录页的链接跳转到认证服务器上进行认证授权操作,应用系统在对接系统时只需要提供一个标准的回调接口就可以实现OAuth的对接。
但是这种方式存在一个问题:用户在每访问以个应用都需需要执行OAuth2一整套流程,访问多个系统也就需要在OAuth2认证服务上认证多次。
为了实现单点登录的 登录一次访问所有的设计思想,我们需要对OAuth2部分流程作出一定调整,需求如下:
- 用户不再需要只需要登录单点登录服务,不需要单独进入其他应用。
- 用户登录后通过单点登录服务页面的连接访问应用,登录期间不需要再次认证。
- 应用系统对接单点登录系统只需要按照标准的OAuth2协议对接。
调整后整合了OAuth2的单点登录时序如下:

- 用户登录SSO系统而不是应用系统。
- 认证后进入系统列表显示已经对接的应用
- 在用户点击应用后,SSO系统根据应用注册提供的回调地址,按照OAuth2协议返回带有授权码的重定向请求。
- 浏览器重定向至应用系统的OAuth2标准接口,剩下的流程与OAuth2协议保持一致。
该方案只需要设计好SSO系统的认证、用户会话管理、应用跳转时的301重定向流程,其它与OAuth2保持一致。
过去已经按照OAuth2对接的应用,在这样流程下无序任何调整,新对接的应用系统按照OAuth2协议提供标准的回调接口就可以实现OAuth的对接,由较高的兼容性。
参考文献
[1]. 理解OAuth 2.0 . 阮一峰 . 2014.05 . https://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html
[2]. ietf . RFC6749 The OAuth 2.0 Authorization Framework . 2012.10 . https://datatracker.ietf.org/doc/html/rfc6749#section-4.1
边栏推荐
- eVC4编的程序不能在emulator上运行
- 在徽商期货开户做期货安全吗?
- VScode 中查看本地ip地址
- Transformation of DS and DXDY in surface integral of area
- Is xshell worse than SecureCRT?
- pytorch学习06:Tensor维度变换
- Hongmeng OS learning (rotation chart, list, icon)
- 【环境踩坑】使用FastDFS测试上传文件时报错
- 0x00007ffff3d3ecd0 in _IO_vfprintf_internal (s=0x7ffff40b5620 <_IO_2_1_stdout_>
- pytest-fixture、conftest、mark的介绍和使用
猜你喜欢

Tensorflow环境搭建

比特運算比特與

聚宽 - 简单策略试验

Pytorch learning 10: statistical operations

The next goal of digital transformation: providing just in time information

Pytorch learning 03: tensor data types and some operations

Meetup03期回顾:Linkis新版本介绍以及DSS的应用实践

鸿蒙OS学习(轮播图、列表、图标)

均线策略专测

Pytorch learning 05: indexing and slicing
随机推荐
sed 技巧
find 查找不同扩展名的文件
对“基于tensorflow+RNN的新浪新闻文本分类”一文的图示化理解
过孔式导电滑环怎么用
Hongmeng OS learning (rotation chart, list, icon)
【环境踩坑】No module named ‘PyQt5‘
Bit operation bit and
手写数据库连接池
Tensorflow环境搭建
How to judge pure IP? Where can I find it? Is it Expensive?
pytorch学习07:Broadcast广播——自动扩展
lvgl使用demo示例及说明1
【环境踩坑】在自己电脑上搭建FastDFS
怎么读一篇论文
Eslint: error
如何让自己的网站快速被搜索引擎找到
Pytorch learning 13: implement letnet and learning nn Module related basic operations
Leetcode做题目录
让人无法喜爱的STL
0x00007ffff3d3ecd0 in _ IO_ vfprintf_ internal (s=0x7ffff40b5620 <_IO_2_1_stdout_>