什么是OAuth2分布式授权协议?

news2024/12/29 9:08:55

今天我将和大家一起探讨在系统安全领域非常常见的一种授权协议,这就是OAuth2协议,这个协议通常用于对请求访问进行安全控制。在引入这个协议之前,让我们先来回顾两个基本概念,一个是认证,一个是授权。这两个概念比较容易混淆,它们的英文也比较类似,分别是Authentication和Authorization。

我们首先需要明确,所谓认证,解决的是“你是谁”这一个问题,也就是说对于每一次访问请求,系统都能判断出访问者是否具有合法的身份标识。

一旦明确 “你是谁”之后,下一步就可以判断“你能做什么”,这个步骤就是授权。通用的授权模型通常都是基于权限管理体系的,也就是说是对资源、权限、角色和用户的一种组合处理。

如果我们将认证和授权结合起来,就构成了对系统中资源进行安全性管理的一种最常见的解决方案,也就是说先判断资源访问者的有效身份,然后再来确定他是否具备对这个资源进行访问的合法权限,如下图所示:


我们今天要介绍的OAuth2协议本质上是一种授权协议,解决的是分布式环境下开放和消费第三方接口中的授权问题。为了更好的理解OAuth2协议的应用场景,我们来看一个例子。

在提倡互联网医疗的大背景下,假设说你要开发一个中医问诊平台,该平台可以根据用户存储在康美大药房(一家知名的中医在线购药平台)中的中药饮片购买记录来智能地计算用户所可能具有的中医症状,并自动推荐相关的中医专家。这样的话,用户为了使用问诊服务,就必须让该问诊平台读取自己在康美大药房上的药品购买记录。

在这个场景中,难点在于只有得到用户的授权,康美大药房才会同意问诊平台读取用户的药品购买记录。那么问题就来了,问诊平台怎么样才能获得用户的授权呢?一般想到的方法是用户将自己的康美大药房用户名和密码告诉问诊平台,然后问诊平台就可以通过用户名和密码登录到康美大药房并读取用户的购药记录,整个过程如下图所示:


上图中的方案虽然可行,但显然存在几个严重的缺点:

  1. 问诊平台为了开展后续的服务,会保存用户在康美大药房上的密码,这样很不安全。
  2. 问诊平台拥有了获取用户存储在康美大药房上所有资料的权力,用户没法限制问诊平台获得授权的范围和有效期。
  3. 用户只有修改密码,才能收回赋予问诊平台的权力,但是这样做会使得其他所有获得用户授权的类似问诊平台的第三方应用程序全部失效。
  4. 只要有一个第三方应用程序被破解,就会导致用户密码泄漏,以及所有被密码保护的数据产生泄漏。

既然这个方案有这么多问题,那么有没有更好的办法呢?答案是肯定的,OAuth2协议的诞生就是为了解决这些问题。

针对上述场景,我们实际上已经引出了OAuth2协议中所具备的四个核心角色,如下图所示:


在上图中,我们注意到:

  1. OAuth 2协议中把需要访问的接口或服务统称为资源(Resource), 每个资源都有一个拥有者(Resource Owner),也就是案例中的用户。
  2. 案例的中医问诊平台代表的是一种第三方应用程序(Third-party Application),通常被称为客户端(Client)。客户端在获得资源所有者的授权后可以去访问对应的资源。
  3. 康美大药房在案例中的角色是服务提供商,拥有一个资源服务器(Resource Server)和一个授权服务器(Authorization Server)。其中资源服务器存放着用户资源,案例中的用户购药记录就是一种用户资源。而授权服务器则对资源拥有者的身份进行认证,完成授权审批流程,并最终颁发一个访问令牌(Access Token)

进到这里,你可能会问,所谓的访问令牌是什么?令牌是OAuth2协议中非常重要的一个概念,本质上也是一种代表用户身份的授权凭证,但与普通的用户名和密码信息不同,令牌具有针对资源的访问权限范围和有效期,如下所示就是常见的一种令牌信息:

{

    "access_token": "b7c2c7e0-0223-40e2-911d-eff82d125b80",

    "token_type": "bearer",

    "refresh_token": "40ee99d5-90f6-43ce-920f-383a619fc806",

    "expires_in": 43199,

    "scope": "webclient"

}

  1. 上述信息中的access_token 就是OAuth2的令牌,当访问每个受保护的资源时,用户都需要携带这个令牌以便进行验证
  2. 针对token_type,OAuth2协议中有很多中可选的令牌类型,包括bearer类型、mac类型等,这里指定的是最常见的一种类型,就是bearer类型;
  3. expires_in属性用于指定access_token的有效时间,当超过这个有效时间的时候,access_token将会自动失效
  4. refresh_token的作用在于,当access_token 过期之后,重新下发一个新的access_token;
  5. scope指定了可访问的权限范围,这里指定的是访问Web资源的“webclient”

介绍完令牌之后,你可能会好奇这样一个令牌究竟有什么用?接下来,就让我们来看一下如何基于令牌来完成基于OAuth2协议的授权工作流程,整个流程如下图所示:


上图流程中包含了以下6个核心步骤:

  1. 客户端请求用户的授权,请求中一般包含资源的访问路径、对资源的操作类型等信息
  2. 用户同意给予客户端授权,并将这个授权发送给客户端
  3. 客户端向授权服务器请求访问令牌。此时,客户端需要向授权服务器提供上一步获取的授权信息,以及客户端自身的有效身份凭证
  4. 授权服务器验证通过后,向客户端返回访问令牌
  5. 客户端携带访问令牌访问资源服务器上的资源。在令牌的有效期内,客户端可以多次携带令牌去访问资源。
  6. 资源服务器验证令牌的有效性以及是否过期,验证通过后才能开放服务。

在整个工作流程中,最为关键的是第二步,只有获取了这个授权之后,客户端才可以获取令牌,进而凭令牌获取资源。那么用户如何才能获取客户端授权呢?在OAuth 2.0中,定义了四种授权方式,即授权码模式(Authorization Code)、简化模式(Implicit)、密码模式(Password Credentials)和客户端模式(Client Credentials):


这里我们先来介绍最常用的授权码模式。授权码模式功能最完整,流程也最严密,该模式的特点就是通过客户端系统的后台服务器,与服务提供商的授权服务器进行交互,如下图所示:


上图中的的几个步骤说明如下:

  1. 用户访问客户端,客户端会将用户导向授权服务器。
  2. 用户选择是否给予客户端授权。
  3. 假设用户给予授权,授权服务器将用户导回客户端事先指定的回调地址,同时附上一个授权码。
  4. 客户端收到授权码,并附上回调地址,向授权服务器申请令牌。这一步是在客户端系统的后台服务上完成的,对用户不可见。
  5. 授权服务器核对授权码和回调地址,确认无误后,向客户端发送访问令牌。

授权码模式的特点在于当用户同意授权后,授权服务器不是马上返回最终的令牌,而是一个授权码,需要客户端携带授权码去换令牌,这就需要客户端自身具备与授权服务器进行直接交互的后台服务。

讲完授权码模式,我们再来看另一种比较常用的密码模式。相较授权码模式,密码模式比较简单,也更加容易理解,它的工作流程如下图所示:


在密码模式下,用户向客户端提供用户名和密码,然后客户端将用户名和密码发给授权服务器并请求令牌,授权服务器确认无误后,就会向客户端发放令牌。以目前主流的微服架构而言,当我们发起HTTP请求时,关注的是如何通过HTTP协议透明而高效的传递令牌,授权码模式下通过回调地址进行授权管理的方式就不是很实用,密码模式反而更加简洁高效。

到这里为止,我们已经把OAuth2协议的主题内容都介绍到了。你可能也已经注意到,虽然说OAuth2协议解决的是授权问题,但它也应用到了认证的概念,因为只有验证了用户的身份凭证,我们才能完成对他的授权。所以说,OAuth2是一款技术体系比较复杂的协议,综合应用了信息摘要、签名认证等安全性手段,并需要提供令牌以及背后的公私钥管理等功能。

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

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

相关文章

python18 正则表达式

python18 正则表达式 正则表达式 re.match(),re.search(),re.findall(),re.sub(),re.split() 元字符 具有特殊意义的专用字符 导入模块 improt re代码 正则表达式 re.match(),re.search(),re.findall(),re.sub(),re.split() 元字符 具有特殊意义的专用字符 导入模块 improt rei…

德国慕尼黑智慧能源展去了多少家国内充电企业?

无论是为了突破本土市场的局限,出海开拓更广阔的国际市场需求,增加销售额,分散市场风险,还是为了通过出海获得国际经验后以反哺国内市场。 各大行业都出现了“要么出海,要么出局”的声音。扬帆出海,参与全球…

oracle开放某些视图给特定用户,查询报视图不存在问题

以sysdba身份登录到Oracle数据库。 创建新用户。例如,创建一个名为new_user的用户,密码为password: CREATE USER new_user IDENTIFIED BY password;为新用户分配表空间和临时表空间。例如,将表空间users和临时表空间temp分配给新…

演示:WPF开发的Diagram自动化流程图应用

一、目的:演示Diaram应用功能 二、预览 三、功能列表 功能模块 通用测试 流程图 仪器仪表 机器人 网络通信测试 PLC测试 轮毂生产线流程测试 图像处理 目标检测 绘图 思维导图 图表 流程图功能 模板管理 工程管理 模块许可管理 工具栏 开始 停止 删除 清除 …

Wilcom PE 威尔克姆绣花软件下载安装;Wilcom PE 广大绣花制版师必备软件!

Wilcom PE这款软件不仅具备强大的设计功能,更在用户体验上下足了功夫,使得刺绣图案的创作变得更为简单、高效。 在Wilcom PE的丰富工具箱中,用户可以发现各种精心设计的工具,它们如同刺绣师手中的魔法棒,将创意变为现…

图象去噪1-使用中值滤波与均值滤波

1、中值滤波 使用中值滤波去除图像的异常像素点,使用cv2.cv2.medianBlur(img, 3)表示再图像在中值滤波窗口3*3的范围内,从下到大排序,将当前值替换为排序中值(如下图所示)将56替换为(56,66,90,…

NUC980-OLED实现全中文字库的方法

1.背景 有一个产品,客户需要屏幕展示一些内容,要带一些中文,实现了OLED12864的驱动,但是它不带字库,现在要实现OLED全字库的显示 2.制作原始字库 下载软件pctolcd2002 设置 制作字库 打开原始文件 用软件自带的&…

MK米客方德SD NAND的掉电保护机制

随着科技的飞速发展,数据存储设备在我们的生活和工作中扮演着越来越重要的角色。然而,数据安全问题也随之而来,尤其是面对突然的电源故障或意外断电,我们宝贵的数据可能会面临丢失的风险。MK米客方德公司深知这一点,因…

【机器学习300问】129、RNN如何在情感分析任务中起作用的?

情感分析是自然语言处理(NLP)领域的一个重要分支,它的目标是自动检测和提取出非结构化文本数据中的主观信息(比如:情绪、意见、评价等) 一、情感分析任务案例 分析电商产品评论的情感倾向(三分类…

小林图解系统-五.进程管理 5.4.怎么避免死锁?

死锁的概念 多线程编程中国,为了防止多线程竞争共享资源而导致数错乱,都会在操作共享资源之前加上互斥锁,只有成功获得锁的线程,才能操作共享资源,获取不到锁的线程就只能等待,直到锁被释放。 当两个线程…

如何使用Rekono结合多种工具自动完成渗透测试

关于Rekono Rekono是一款功能强大的自动化渗透测试工具,该工具能够结合其他多种网络安全工具并以自动化的形式完成整个渗透测试过程。在工具运行的过程中所收集到的数据将通过电子邮件或Telegram同时发送给用户,如果需要更加高级的漏洞管理功能&#xf…

移动端 UI 风格,彰显不凡

移动端 UI 风格,彰显不凡

PostgreSQL中 FETCH FIRST ... WITH TIES 是查询结果中限制返回的行数

在 PostgreSQL 中,FETCH FIRST … WITH TIES 是一个在查询结果中限制返回的行数,但同时确保与最后一行具有相同排序值的所有行都被包括进来的子句。这通常与 ORDER BY 子句一起使用。 当您使用 FETCH FIRST n ROWS ONLY 时,您只会得到前 n 个…

Flash页、扇区、块的区别

文章目录 前言玩转Flash的小知识一、页(Page)二、扇区(Sector)三、块(Block)总结存储基础知识 瑞萨芯片简介(片上资源分配)和工具链使用 前言 FLASH 存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速…

Web开发技术大作业(HTML\CSS\PHP\MYSQL\JS)

从6月13日到6月15日,经过一系列的操作,终于把老师布置的大作业写完了,虽然有很多水分,很多东西都是为了应付(特别是最后做的那几个网页),真的是惨不忍睹,不过既然花时间写了&#xf…

WIC 图像处理初体验——读取像素的值

先放上运行结果&#xff1a; 可以发现红绿蓝是从后往前的。 必须以C方式编译代码&#xff01; // 参考资料&#xff1a;https://learn.microsoft.com/zh-cn/windows/win32/wic/-wic-lh #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <wincodec.h>…

164万年后的日期解析引发的OOM

名词解释 商家销项发票业务&#xff08;平台给商家开票&#xff09;&#xff0c;是平台提供给商家的工具产品&#xff0c;商家购买了平台的服务&#xff0c;那么平台需要开票给商家。 前言 本文所描述的问题&#xff0c;是应用的OOM引发的接口成功率下跌&#xff0c;排查过程中…

用于视觉对象跟踪的序列到序列学习

阅读完此论文后&#xff0c;对着代码过一遍思路 原文地址&#xff1a;https://arxiv.org/abs/2304.14394 本文将视觉跟踪建模为一个序列生成问题&#xff0c;以自回归的方式预测目标边界框。抛弃了设计复杂的头网络&#xff0c;采用encoder-decoder transformer architecture…

手机数据如何恢复?11 款最佳安卓手机恢复软件

媒体可能由于各种原因而从您的设备中删除&#xff0c;可能是意外或病毒攻击。 在这些情况下&#xff0c;照片恢复应用程序是唯一的解决方案。理想的照片恢复应用程序取决于各种因素&#xff0c;例如存储设备的损坏程度、删除照片后的持续时间以及应用程序使用的恢复算法的有效性…

玩玩大模型:总结归纳可以,策划创新拉垮

最近身边的人都在研究大模型。太深入的理解不了&#xff0c;有一些人会讲讲promt提示&#xff0c;学了几招。 比如&#xff1a; #角色 你是一个美食博主 #条件 我只有xxx元&#xff0c;在xxx.... #任务 找一家好吃的当地特色餐馆... 多试几次&#xff0c;有些结果很有参考价值…