微服务下如何选择OAuth2授权之四种模式

news2024/12/23 17:27:31

OAuth2.0是一个授权框架,他规定了客户从授权服务器获取令牌Token的规则。

一、OAuth2的组成部分

 1.OAuth2.0需要解决的问题

要理解OAuth2.0,先要知道为什么会有这个东西产生,或者说他能帮我们解决什么问题,其实简单说他就是帮我们解决了访问安全问题。先看如下的一张图:

 

图片显示了我们没有引入任何安全机制情况下的资源访问过程,可以看到正常的用户和恶意的用户都可以通过向资源服务器的接口发送请求获得用户数据。显然恶意用户不该获取数据,他是非法获得,这个情况不应该被允许,需要一种机制保护用户数据。

2.OAuth2.0主要角色

OAuth2.0包含了资源拥有者,授权服务器,客户应用,授权服务器,资源服务器。
客户应用:通常是一个 WebWeb 或者无线应用,它需要访问用户的。
资源服务器:是一个 webweb 站点 或者 web service web service web service web service API ,用户的受保护。
授权服务器:在客户应用成功认证并获得授权之后,向客户应用颁发访问令牌Access Token。
资源拥有者:资源的拥有人,想要分享某些资源给第三方应用。

 


除了以上的四种角色,我们还要掌握以下三个概念:
客户凭证:客户的 clientId 和密码用于认证客户。
令牌:授权服务器在接收到客户请求后,颁发的访问令牌。
作用域:客户请求访问令牌时,由资源拥有者额外指定的细分权限(permission)。

3.OAuth2.0令牌类型

1)授权码(Authorization Code Token),仅用于授权码授权类型,用于交换获取访问令牌和刷新令牌
2)刷新令牌(Refresh Token),用于去授权服务器获取一个新的访问令牌
3)访问令牌(Access Token),这是OAuth令牌类型中最核心的一个,用于代表一个用户或服务直接去访问受保护的资源
4)Bearer Token,不管谁拿到Token都可以访问资源,像现钞
5)Proof of Possession(PoP) Token,可以校验client是否对Token有明确的拥有权

4.OAuth2.0的授权机制

上面提到了需要提供一种机制来保护数据,OAuth2.0提供的就是一种授权机制,就是说用户要访问资源必须先通过授权服务器授权拿到Access Token(访问授权),他拿着这个Access Token才能去资源服务器去要他想要的数据,示意图如下:

 

这里看到我们引入了一个授权服务器,这个授权服务器就是专门负责颁发Access Token的,客户应用需要从授权服务器中获得Access Token,获得后再向资源服务器去获取数据,请求中包含了Token一起发到资源服务器,资源服务器首先要验证这个Token是否合法,如果合法再返回数据给客户应用。
上图中红色圈圈圈起来的就是OAuth2.0框架协议工作的地方,他规定了客户应用如何获取Access Token,以及如何使用Token的整个过程。

5.Spring Security OAuth2.0架构

 

其中核心的授权服务器包括了授权端点,令牌端点,校验端点,注销端点,如下图所示:

 

二、如何选择OAuth2.0的授权模式

授权码模式有一个基本的选择流程,如下图

 

OAuth2.0的四种授权模式的实现方式

OAuth2.0中规定了多种授权模式,各种模式实现的复杂程度和安全系数不一样,我们先分别看一下四种授权模式:
1)授权码(Authrization Code)模式:
基本流程是先通过前端渠道客户获取授权码,然后通过后端渠道,客户使用Authrization Code去交换Access Token和可选的Refresh Token,这种模式是最安全的模式,因为令牌不会通过user-agent去传递,完整的过程如下图:

 

授权码模式的优点是比较安全,他可以有token过期时间,而且上面的第四和第五步都是在服务器之间的访问,很难被截获,用户信息也存在服务端,这样就保证了他的安全性。他的缺点是需要进行多次请求才能访问到资源。
授权码模式假定资源拥有者和客户不在一台设备上,他拥有高安全性的保障,目前市面上主流的第三方认证都是采用这种模式。

2)隐式/简化(Implicit)模式
基本流程是Access Token直接通过前端渠道从授权服务器返回,完整的过程如下图:

 


简化模式的优点是简单,缺点是容易受到安全攻击,通常是没有refresh_token没法更新token,token有暴露的风险。
简化模式假定资源拥有者和客户在相同的设备上,适合公开的浏览器单页应用,比较适合用作问卷调查,评论这一类系统中采用这种模式。

3)密码(Resource Owner Password)模式
基本流程是使用用户名/密码作为授权方式从授权服务器上获取Access Token,而且一般不支持refresh token,完整的过程如下图:

 


密码模式假定资源拥有者和客户在相同的设备上,适合一般的需要用户名/密码登录的一些桌面App应用。通常情况下,当使用的桌面应用或者App是自家开发的时候可以用这种模式,安全是受控的。

4)客户端(Client)模式
基本流程是通过后端渠道去获取一个Access Token,因为客户凭证可以使用对称或者非对称加密,该方式支持共享密码和证书,完整的过程如下图:

 

客户端模式适合用作服务器间通信场景。



 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/623429.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【解决】跨设备访问Ubuntu接口文档,请求超时,ping不通问题

文章目录 一、问题描述二、系统环境三、问题原理说明1. 常见问题原因2. 说说IP 地址和子网掩码不匹配问题 四、有风险的解决方法1. 一般的解决方法:2. 我们的解决方法:第一:第二: 选择网络适配器第三:桥接模式第四&…

js常用的一些技巧【一行】

前言 总结一些常用的,但是一时可能想不起来的一些js小技巧,方便CV 数组 生成数组 当你需要要生成一个0-99的数组 方案1 const createArr (n) > Array.from(new Array(n), (v, i) > i) const arr createArr(100) // 0 - 99 数组方案2 const c…

相同性能和体积的磁体,吸力是一样的吗?

很多小伙伴可能都会有这样一个疑问,相同性能和体积的磁体,它们的吸力一样吗?网上有说钕铁硼磁铁的吸力是自身重量的640倍,这可信吗? 这个问题其实可以发散开,那就是磁铁的吸力与哪些因素有关。首先需要明确…

【已解决】qt4安装包下载含下载链接(完全版)

总所周知,c qt4.8是一个稳定版本,而qt4.8去网上找的我好辛苦,而且官网时而挂机一样,网站崩溃一样,即使找到了,它们也会让你下载qt4.8版本,而那些,比如这里就会显得手足无措。 问题…

爱创科技闪“药”亮相第62届全国制药机械博览会!

2023年5月28日-30日,第62届(2023年春季)全国制药机械博览会暨2023中国国际制药机械博览会在青岛国际世界博览城完美收官。全国药机展是业界公认的专业化、国际化、规模大、展品全、观众多,集贸易、研讨于一体的制药装备行业交流平…

FPGA实战开发-基于的ddr图像缓存设计(上)

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示:这里可以添加技术概要 例如: 本文主要基于DDR的图像缓存设计 整体架构流程 提示:这里可以添加技术整体架构 先用图像产生模块产生一个1080P60Hz的测试图像,然…

内网程序配置外网访问方案

该方案可解决客户公司没有固定IP,内网IIS程序配置外网访问。如果有固定IP,可以直接在公司主路由器上映射端口即可。 一、申请一个公司域名和云服务器 二、在申请的公司一级域名下,解析一个二级域名,使用泛域名方式,解…

Mysql版本升级教程【5.x到8.x】

目录 0.查看当前版本1.备份导出原数据2.停止Mysql服务3.卸载Mysql相关组件4.删除Mysql安装目录5.删除Mysql数据目录6.官网下载新版安装包7.安装新版Mysql8.配置环境变量 0.查看当前版本 1.备份导出原数据 可以在Navicat里将相关数据库存到.sql文件中,到时候直接导入…

阿里面试太为难我了,阿里面试了7轮(拿下P7岗offer)

前言 今年的大环境非常差,互联网企业裁员的现象比往年更严重了,可今年刚好是我的第一个“五年计划”截止的时间点,说什么也不能够耽搁了,所以早早准备的跳槽也在疫情好转之后开始进行了。但是,不得不说,这…

准备跳槽的兄弟可以看看...

八股文为什么这么火爆? 因为只要大家技术和能力过关,八股文能帮助大家在面试时有很好的表现和稳定的发挥,让面试官预估到你能带来的价值,从而实现薪资高涨幅。 总结了一些小伙伴的面试经验,和我自己多年的资料库存&a…

Zabbix“专家坐诊”第194期问答汇总

问题一 Q:请问一下,我这个监控上了光交和V7000通过trap,mib文件也上传了,usr/snmp/mibs/V7000目录,是创建的监控项调用此文件夹下的mib文件,还是自动找呢? A:mib文件只用于mib内容…

深度学习架构-Tensorflow

深度学习基本概念 人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能的目的 就是让计算机能够像人一样思考。 强人工智能:就是要使机器学习人的理解、学习和执行任务的能力。 弱人工智能:指用…

计算机网络安全的主要内容是什么?CISP题库分享

在技术上,网络安全包括物理安全、运行安全、信息安全和安全保证四个方面: 物理安全 包括环境安全、设备安全和记录介质安全。环境安全涉及中心机房和通信线路的安全保护问题;设备安全涉及设备的防盗和防毁、设备的安全使用等问题;记录介质安…

linux-docker备份数据库

利用计划任务和批处理从docker容器中备份数据库文件到宿主机指定目录 如何创建定时任务 创建计划任务(定时任务): crontab -e打开后是VI编辑器,将自己计划任务的内容写到里边然后wq(保存并退出)就行了 查…

当涉及到嵌入式开发时

以下是一些建议和关键要点,可以帮助您进行有效的开发: 硬件选择:根据项目需求选择合适的硬件平台和组件,包括处理器、存储器、传感器和通信接口等。考虑功耗、性能、可靠性和成本等因素。 软件开发环境:选择适合嵌入式…

3.1 增加多进程执行playwright

增加了多进程的方式执行测试代码,对代码改动比较大 1、case case目录依然是自动生成 2、config dir_collection.py新增了配置 mkdir_collections [case,log,img, ] del_collections [results,report ] del_regex temp3、data/img/log/resource/video data/im…

Linux内核4.14版本——drm框架分析(6)——实例注册drm device/ encoder/crtc/plane/connector等

目录 1. 简介 2. drm device的注册 3. fops 根据前面几篇文档的介绍,我们知道了drm的整体的构成,后面的文章我们从实际的一个例子中进行分析。 1. 简介 kernel版本:4.14 gpu:ARM Mali DP650 hdmi:dw hdmi 涉及的…

[已解决]无法在Windows 11中扩展C盘

如果你的台式电脑或笔记本电脑刚刚升级到Windows 11,如果你没有足够的硬盘空间来保存新文件和软件,那你可能会收到磁盘空间不足的警告。在这种情况下,你可能需要扩展分区来解决这个问题。 虽然Windows系统自带了“磁盘管理”工具&a…

10分钟了解Kubernetes网络

Kubernetes是现代容器化应用不可或缺的强大、可靠的基础平台。本文将介绍Kubernetes中与网络相关的组件,正是这些组件支撑Kubernetes成为云原生应用的首选基础设施。原文: Networking in Kubernetes 网络是Kubernetes中非常值得理解的重要主题,它帮助Kub…

【熬夜送书 | 第四期】python期末考试总结

文章目录 前言单选题程序填空题函数题编程题熬夜送书 第三期 前言 博主也是第一次接触到python语言,在考试前过了一遍python语法,因为有Java基础学习起来相对比较轻松,学校考的题相对简单一些,也是PTA上机考试,大概30…