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

目录

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.mzph.cn/news/882461.shtml

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

相关文章

SpringBoot日常:封装redission starter组件

文章目录 逻辑实现POM.xmlRedissionConfigRedissionPropertiesRedissionUtilsspring.factories 功能测试application.yml配置POM.xmlTestController运行测试 本章内容主要介绍如何通过封装相关的redission连接配置和工具类,最终完成一个通用的redission starter。并…

洛谷 P1038 [NOIP2003 提高组] 神经网络(拓扑排序)

题目传送门 感觉这道题需要我们高超的语文阅读水平…… 解题思路 我们发现要计算一个细胞的状态值(),就需要先算出有边指向它的其他细胞对答案的贡献; 这是有拓扑序的,所以我们想到拓扑排序。 题目中说了&#xff0…

FastDFS单节点部署

FastDFS单节点部署 1、FastDFS入门1.1 分布式文件系统1.2 FastDFS 简介1.3 FastDFS 发展历史1.4 FastDFS 整体架构1.5 FastDFS 线上使用者 2、FastDFS 环境搭建2.1 FastDFS 安装2.1.1 安装前的准备2.1.2 安装 libfastcommon库2.1.3 安装 FastDFS 2.2FastDFS 配置2.2.1 去掉/etc…

即使是编程新手,也能利用ChatGPT编写高质量的EA

在外汇交易领域,MetaTrader是一款备受欢迎的交易软件,包括MT5和MT4,提供了众多强大的分析工具和自动化交易功能。对于没有编程经验的新手而言,编写专家顾问(EA)可能显得既复杂又令人望而却步。幸运的是&…

数据结构——链表,哈希表

文章目录 链表python实现双向链表复杂度分析 哈希表(散列表)python实现哈希表哈希表的应用 链表 python实现 class Node:def __init__(self, item):self.item itemself.next Nonedef head_create_linklist(li):head Node(li[0])for element in li[1…

spring6 IoC容器详解

目录 一、引言 示例开发 示例分析 启用Log4j2日志框架 使用方式 二、IoC容器 IoC容器 1.控制反转(IoC) 2.依赖注入 3.IoC容器在Spring的实现 基于XML管理Bean 依赖注入之setter注入 依赖注入之构造器注入 Bean生命周期 基于xml自动装配 …

基于SSM+微信小程序的打印室预约管理系统(打印2)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM微信小程序的打印室预约管理系统实现了管理员和用户两个角色。 1、管理员功能有个人中心,用户管理,附近打印店管理,文件打印管理,当…

ui自动化知识点-web端

UI : User Interface( ⽤户接⼝ - ⽤户界⾯ ) ,主要包括: app 、 web ui ⾃动化测试:使⽤⼯具或代码执⾏⽤例的过程 什么样的项⽬适合做⾃动化:1、需要回归测试项⽬(甲⽅⾃营项⽬、⾦融、电商)2、需求变动不频繁:稳定的模块3、项⽬周期⻓的项⽬:(甲⽅⾃营项⽬、6个…

YOLO11改进 | 主干网络 | 将backbone替换为Swin-Transformer结构【论文必备】

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 本文给大家带来的教程是将YOLO11的backb…

LaTeX教程(016)-LaTeX文档结构(16)

LaTeX教程(016)- LaTeX \LaTeX LATE​X文档结构(16) 接上一讲 我们前面知道,\vref是对\ref的升级,而varioref包也提供了一个对\pageref升级的命令\vpageref。它和\vref的原理很相似,内置了一些判断。 \vpageref[same-page][other-page]{ke…

【C++】C++当中的复合类型——引用和指针

C当中的复合类型 最近开始系统地学习 C 的语法,参考的主要资料来自于 C Primer 第五版,对于学习过程中所遇到的较难理解的点,我会以blog的形式对问题和内容进行记录,并进行进一步地探讨。 这一部分的内容对应于参考资料 C Prime…

spring-cloud-alibaba-nacos-config2023.0.1.*启动打印配置文件内容

**背景:**在开发测试过程中如果可以打印出配置文件的内容,方便确认配置是否准确;那么如何才可以打印出来呢; spring-cloud-alibaba-nacos-config 调整日志级别 logging:level:com.alibaba.cloud.nacos.configdata.NacosConfigD…

Linux操作系统与windows无法相互复制问题

请先看完此文在进行操作!!! 对于无法复制我们逐层分析: 1.为什么无法复制是不是少了什么工具(open-vm-tools-destop) 上网查阅可以看到如下 2.在此之前我的虚拟机装完Ubuntu 16.04的linux系统无法进行apt update(参考一下) li…

华三服务器R4900 G5在图形界面使用PMC阵列卡(P460-B4)创建RAID,并安装系统(中文教程)

环境以用户需求安装Centos7.9,服务器使用9块900G硬盘,创建RAID1和RAID6,留一块作为热备盘。 使用笔记本通过HDM管理口()登录 使用VGA()线连接显示器和使用usb线连接键盘鼠标,进行窗…

excel判断某一列(A列)中的数据是否在另一列(B列)中

如B列如果有7个元素,在A列右边的空白列中,输入如下公式: COUNTIF($B$1:$B$7,A1), 其中,$B$1:$B$7代表A列中的所有数据即绝对范围,A1代表B列中的一个单元格.

Servlet(一)

一.什么是servlet Servlet 是一种实现动态页面的技术。 是一组 Tomcat 提供给程序猿的 API, 帮助程序猿简单高效的开发一个 web app。 1.回顾 动态页面 vs 静态页面 静态页面也就是内容始终固定的页面。即使 用户不同/时间不同/输入的参数不同 , 页面内容也不会发生变化。(除…

从 Microsoft 官网下载 Windows 10

方法一: 打开 Microsoft 官网: 打开开发人员工具(按 F12 或右键点击“检查”)。 点击“电脑模拟手机”按钮,即下图: 点击后重新加载此网页,即可看到下载选项。

Palo Alto Networks Expedition 未授权SQL注入漏洞复现(CVE-2024-9465)

0x01 产品介绍: Palo Alto Networks Expedition 是一款强大的工具,帮助用户有效地迁移和优化网络安全策略,提升安全管理的效率和效果。它的自动化功能、策略分析和可视化报告使其在网络安全领域中成为一个重要的解决方案。 0x02 漏洞描述&am…

windows下安装、配置neo4j并服务化启动

第一步:下载Neo4j压缩包 官网下载地址:https://neo4j.com/download-center/ (官网下载真的非常慢,而且会自己中断,建议从以下链接下载) 百度网盘下载地址:链接:https://pan.baid…

周易解读:八卦02,八卦所代表的基本事物

八 卦02 上一节,我是讲完了八卦的卦象的画法的问题。这一节,我来尝试着去讲解八卦所代表的自然事物。 八卦是谁发明的呢?根据《周易说卦传》的说法,八卦是伏羲发明的。伏羲氏仰观天文,俯察地理,从中提取…