一文讲清楚 OAuth 2.0 支持的四个授权流程

devtools/2024/10/21 3:54:24/

目录

1、授权码授权流程(Authorization Code Grant)

 2、隐式授权流程(Implicit Grant)

3、密码凭证授权流程(Resource Owner Password Credentials Grant)

4、客户端凭证授权流程(Client Credentials Grant)


OAuth 2.0协议支持多种授权流程(Authorization Grant Types),用于实现在不同场景下的授权。在开始讲解前,再罗列一下 OAuth 2.0 中的几个参与方,在正文中使用的关键概念一定要和这里的对齐,千万不要按照自己认为的意思去理解。

  • Resource Owner(资源所有者):资源的拥有者,通常是终端用户。资源可以是用户数据、照片、视频等。
  • Client(客户端,还有另外一种叫法是 Relying party):请求访问受保护资源的第三方应用。客户端可以是 Web 应用、移动应用或桌面应用。
  • Authorization Server(授权服务器):负责验证资源所有者的身份并颁发 Access Token 给客户端的服务器。
  • Resource Server(资源服务器):存储受保护资源的服务器,可以接收并响应使用 Access Token 访问的请求。很多企业和组织在实现的时候,会把 Resource Server 和 Authorization Server 做在一个服务里面。

1、授权码授权流程(Authorization Code Grant)

这是推荐的也是最安全的 OAuth 2.0 授权流程,授权过程如下:

  1. 客户端向授权服务器请求授权:客户端重定向用户到授权服务器并请求授权。包括客户端标识、请求的范围(Scope)等信息。
  2. 用户授权:资源所有者登录并授权客户端访问其受保护资源。
  3. 授权服务器颁发授权码:如果资源所有者同意授权,授权服务器将重定向用户到客户端并附带一个授权码。
  4. 客户端通过授权码获取 Access Token:客户端使用授权码向授权服务器请求 Access Token(通过云对云的 API 调用来完成)。
  5. 授权服务器颁发 Access Token:授权服务器验证授权码,并颁发 Access Token 给客户端。
  6. 客户端使用 Access Token 访问资源服务器:客户端使用 Access Token 向资源服务器请求访问受保护资源(通过云对云的 API 调用来完成)。

优点:

  • 安全性高,因为 Access Token 存储在后端,不会直接暴露给前端
  • 支持 Refresh Token,可以长期维持用户会话而无需再次让用户输入凭证。

使用场景:

适用于有后端服务器的应用程序,特别是那些需要代表用户执行操作的第三方应用。

 2、隐式授权流程(Implicit Grant)

授权过程:

  1. 客户端向授权服务器请求授权:客户端重定向用户到授权服务器并请求授权。包括客户端标识、请求的范围(Scope)等信息。
  2. 用户授权:资源所有者登录并授权客户端访问其受保护资源。
  3. 授权服务器颁发授权码:如果资源所有者同意授权,授权服务器将重定向用户到客户端并附带 Access Token。
  4. 客户端使用 Access Token 访问资源服务器:客户端使用 Access Token 向资源服务器请求访问受保护资源。

缺点:

  • 安全性较低,因为 Access Token 直接暴露在浏览器中。
  • 不支持 Refresh Token,一旦 Access Token 过期,用户需要重新授权。

使用场景:适用于无后端服务器的应用,例如完全运行在浏览器中的单页应用(SPA)、无后端服务的移动应用等。

3、密码凭证授权流程(Resource Owner Password Credentials Grant)

授权过程:

  1. 用户直接向客户端提供自己的用户名和密码。
  2. 客户端使用这些凭证直接向授权服务器请求 Access Token。
  3. 授权服务器验证凭证。
  4. 如果验证成功,授权服务器向客户端返回 Access Token。

缺点:

  • 安全性非常低,客户端使了用户的用户名和密码,,增加了泄露风险。
  • 不符合 OAuth 2.0不共享用户凭证的设计理念。

使用场景:仅限于用户与客户端之间存在高度信任关系的情况,如企业内部应用或第一方应用

4、客户端凭证授权流程(Client Credentials Grant)

授权过程:

  1. 客户端直接向授权服务器发送客户端 ID 和客户端密钥。
  2. 授权服务器验证客户端的身份。
  3. 如果验证成功,授权服务器向客户端返回 Access Token。

缺点:

  • 客户端密钥泄露可能导致安全问题。
  • 不适用于需要用户授权的场景。

使用场景:适用于客户端需要访问自己的资源或公共数据,而无需用户参与的情况。例如服务器端到服务器端的应用程序通信和访问不需要用户上下文的资源。


http://www.ppmy.cn/devtools/127464.html

相关文章

手写Spring IOC-简易版

目录 项目结构entitydaoIUserDaoUserDaoImpl serviceIUserServiceUserServiceImpl ApplicationContext 配置文件初始化 IOC 容器RunApplication 注解初始化 IOC 容器BeanAutowired Reference 项目结构 entity User Data NoArgsConstructor AllArgsConstructor Accessors(chai…

hi3798mv100 linux 移植

# Linux开发环境搭建 ## uboot编译 1. 必须先安装gcc,要不然make 等命令无法使用 2. 配置arm 交叉编译链 # gcc sudo apt-get install gcc-9 gcc -v# 安装 Linaro gcc-arm-linux-gnueabihf,注意不是arm-linux-gnueabihf-gcc sudo apt-get install ar…

Tauri(读音:踹你)开发简介:1.创建和运行第一个app

桌面app与web app之间的界限越来越模糊,以前可能说基于web编写的app性能不好,但是现在我们来看,不管钉钉还是vscode,都是采用了Electron框架,以web模式开发出来的。 提到Electron相信许多程序员都不陌生,它…

共筑华芯|首届“SEMiBAY湾芯展”龙华区科技创新局助力华芯邦科技携第四代半导体芯星亮相湾区半导体产业生态博览会,诚邀您莅临参观指导

在深圳市政府指导和深圳市发展改革委支持下,深圳市半导体与集成电路产业联盟携手深圳市重大产业投资集团有限公司共同主办的首届“SEMiBAY湾芯展”——湾区半导体产业生态博览会,将于今年10月16日至18日盛大举行。 本次展会以“芯动未来,共创…

【MySQL】VARCHAR和CHAR的区别?

目录 区别存储方式最大长度存取效率 使用场景参考 在MySQL中,VARCHAR和CHAR是两种常用的字符串数据类型,它们各自有不同的特点和适用场景。下面我将和大家一起了解这两种数据类型的区别及使用场景。 区别 存储方式 CHAR(N):定长存储&#…

6-2.Android 对话框之基础对话框问题清单(UI 线程问题、外部取消、冲突问题、dismiss 方法与 hide 方法)

对话框 对话框(Dialog)是一种常用的 UI 组件,它主要用于显示信息、接收用户操作反馈 对话框可以包含各种元素,但是主要还是以文本、按钮为主,其次是列表 其中,基础对话框是 Android 中最简单的对话框&…

elementui时间选择器time-picker返回值不对的问题

1. 问题 天杀的elementui的time-picker,导致我开发的系统出现了一次生产问题,原因竟然是因为组件库的bug!直接上截图。 如图,正常情况下,选择时间后,想要得到的值理应是当天的时间,如图是当年…

Python | Leetcode Python题解之第486题预测赢家

题目: 题解: class Solution:def PredictTheWinner(self, nums: List[int]) -> bool:length len(nums)dp [0] * lengthfor i, num in enumerate(nums):dp[i] numfor i in range(length - 2, -1, -1):for j in range(i 1, length):dp[j] max(num…