正确的工作流程:我应该使用哪个OAuth 2.0流程?

什么是OAuth 2.0

OAuth 2.0是一个已被广泛采用的委托授权框架,已经存在了很多年,并且似乎已经存在。 如果您不熟悉OAuth 2.0的基本概念,可以使用
川崎孝彦写的优秀文章 。 这只是OAuth 2.0各方的简要提醒:

  • 资源所有者–受保护资源的所有者,例如用户
  • 客户端–想要访问受保护资源的应用程序,例如服务器端Web应用程序或单页应用程序(SPA)
  • 授权服务器–发行令牌的服务器
  • 资源服务器–管理资源所有者的受保护数据的服务器

让我们浏览每个OAuth 2.0流程并讨论其用法。

客户证书授予

这是最简单的流程。 它允许客户端使用其客户端ID和客户端密钥请求访问令牌。 两者都安全地保存在客户端并在授权服务器中注册。

OAuth 2.0流程
  1. 第一步,客户端将HTTP请求发送到授权服务器,包括其客户端ID和客户端密钥(例如,在Authorization标头中)。 该请求也可以包括所请求的范围。
  2. 在响应中,授权服务器发送访问令牌。
  3. 客户端使用访问令牌来调用资源服务器。

什么时候使用?

如您所见,没有用户参与。 建议使用“客户端凭据授予”来进行计算机到计算机的授权。 通常,一个受信任的服务将调用另一个服务。

授权码授予

最常用的流程,专门为可以维护其客户端机密性的服务器端应用程序而设计。 这是基于重定向的流之一。

OAuth 2.0流程
  1. 客户端通过将资源所有者的用户代理重定向到授权服务器来启动流程。 客户端包括其客户端ID,请求的范围和重定向URI。
  2. 资源所有者通过授予客户端请求的权限来授权客户端。
  3. 授权服务器将用户代理重定向回客户端(使用来自点1的重定向URI)。 重定向URI包含一个临时授权码(作为查询参数)。
  4. 客户端从授权服务器请求访问令牌。 该请求包括在上一步中收到的客户端ID,客户端密码和授权代码。
  5. 如果所有内容均有效,则授权服务器将返回访问令牌,并可选地返回刷新令牌。
  6. 客户端使用访问令牌代表资源所有者调用资源服务器。

为什么我们需要其他授权码?

为什么我们不能直接请求访问令牌? 为什么首先要引入授权码? 事实证明,主要目标是分离公开给客户和用户代理的信息。 请注意,访问令牌根本不会通过浏览器。 从客户端(服务器端应用程序)使用

通过用户代理转发的授权码。 浏览器有什么问题? OAuth 2.0不需要客户端服务器支持HTTPS。 因此,从技术上讲,可能存在无法通过SSL重定向到客户端服务器的问题。 如果发生这种情况,则通过明文发送授权码。 如果有人拦截了它,那么没有Client Secret还是没有用。 但是,如果您直接通过HTTP发送访问令牌,则可能会遭到破坏。

什么时候使用?

如前所述,建议对服务器端Web应用程序使用此流程。 但是,近年来,这种流程的变体也已用于单页和移动应用程序。

单页应用

对于单页应用程序,唯一的区别是客户端(SPA)没有客户端密钥。 由于SPA在浏览器中运行,并且其源代码是公开的,因此无法在浏览器端对客户端机密保密。 这就是在上图的第4步中,将授权代码交换为访问令牌而不发送客户端密钥的原因。

原生移动应用

与SPA类似,本机移动应用程序被认为是公共的,而不是机密的客户端。 这就是客户端机密不应该存储在移动设备中(因此在请求访问令牌时不发送的原因)。 没有在移动设备中实现没有客户端密钥的授权代码流,可能会存在一些安全问题。 这样的问题之一是,授权码可能会被攻击者拦截并交换为访问令牌。 为了减轻这种风险,有一种称为代码交换证明密钥(PKCE)的技术。 对于每个授权请求,客户端都必须创建一个称为Code Verifier的随机密钥。 授权代码请求中包含其称为Code Challenge的哈希版本。 授权服务器应将此代码质询与其生成的授权代码相关联。 稍后,当为访问令牌交换授权码时,客户端会将代码验证程序作为查询参数。 除了验证标准参数外,授权服务器还应使用先前收到的Code Challenge验证Code Verifier。

OAuth 2.0流程
  1. 客户端移动应用打开带有授权请求的浏览器。 授权请求包括客户端ID,请求的范围,重定向URI和代码质询。
  2. 授权请求发送到身份验证服务器
  3. 资源所有者授权客户。
  4. 结果,授权码被返回给用户代理。
  5. 授权码被传递给客户端。
  6. 客户端应用程序将授权代码和代码验证程序以及重定向URI和客户端ID发送到授权服务器。
  7. 授权服务器将代码验证程序的哈希值与先前发送的代码质询进行比较。 如果它们匹配,则将授权代码交换为访问令牌(以及可选的刷新令牌)
  8. 客户端使用访问令牌代表资源所有者调用资源服务器。

另外, 当前的最佳实践是仅使用外部用户代理(而不是嵌入式Web视图)来发送对授权码的请求。

隐性补助金

它类似于“授权代码授予”,但是它完全跳过了“授权代码”步骤。 客户端直接请求访问令牌,而无需授权码。 此外,不涉及“客户机密”。 在隐式授予中,不使用刷新令牌。 重要的是要提到,访问令牌以散列片段的形式在3xx重定向中返回,并且永远不会从浏览器发送。

什么时候使用?

它最初设计为SPA的流程。 它依赖于浏览器,可能无法在其他环境中安全地实现。 但是,如前所述,对于SPA,近年来,越来越多的组织已经朝着没有客户机密而不是隐式流的授权代码流发展。

资源所有者密码凭证授予

在此流程中,资源所有者将其凭据直接提交到客户端应用程序。 客户端应用程序使用该凭据直接将它们交换为访问令牌(以及可选的刷新令牌)。 与客户端凭据类似,它不是基于重定向的流程。

OAuth 2.0流程
  1. 资源所有者将其凭据提交到客户端应用程序。
  2. 客户端将凭据转发到授权服务器。
  3. 授权服务器返回访问令牌(以及可选的刷新令牌)
  4. 客户端使用访问令牌代表资源所有者调用资源服务器。

什么时候使用?

资源所有者和客户端应用程序之间是否高度信任。 建议仅在无法进行其他处理时才使用它。 现在,设备流扩展可以涵盖资源所有者密码凭证授予的大多数原始用例。

设备流程

这是OAuth 2.0中新增的扩展流,用于覆盖设备具有Internet连接但没有浏览器或输入文字输入能力受限(例如电视)的情况。

在此流程中,设备要求用户使用浏览器(例如智能手机)在设备上打开特定的URL以便进行授权。

摘要

以下是设计为在给定场景中使用的流程的快速摘要:

  • 服务器到服务器:客户端凭据流
  • 服务器端应用程序:授权代码流
  • SPA:没有客户端机密或隐式流的授权代码流
  • 移动设备:PKCE的授权码流
  • 没有浏览器的设备:设备流

翻译自: https://www.javacodegeeks.com/2019/01/right-flow-job-oauth-2-0-flow-should-use.html

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

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

相关文章

【渝粤题库】广东开放大学 秘书实务21 形成性考核

👉关注我,看答案👈 选择题 题目: 秘书职能包括以下哪几项? 选择一项或多项: 题目: 秘书职能包括以下哪几项? 选择一项或多项: 题目: 下列不属于企业文化的功能是&#…

mysql workbench入门_5分钟入门MySQL Workbench

接下来进入下一步,使用Workbench执行sql文件:1.打开Workbench,主页面上点击要connect的连接。2.注意系统偏好设置里,MySQL是running的状态,否则无法执行。创建数据库:点击创建数据库按钮,输入数…

【渝粤题库】广东开放大学 形成性考核 - 副本 (17)

选择题 题目:产值中心论关心的焦点是( ) 题目:要求企业“以产品为中心”的业务模式向“客户为中心”的模式转变,这是客户关系管理的( ) 题目:客户关系管理系统需要建立数据仓库…

【渝粤题库】广东开放大学 文化投资与贸易 形成性考核

选择题 题目:文化产业的最大价值在于()的规模效应。 题目:文化企业指那些在文化产业环境下以创意、生产、交换、()文化产品为方式、以期获得商业利润为目的的工商组织。 题目:由文化产业的内涵可…

apache +php + mysql_apache+php+mysql

apachephpmysqlimapldapjdktomcat的安装以下过程在redhat6.2 7.0下通过。使用软件:apache_1.3.19.tar.gzimap-2000c.tar.Zmod_jserv.so..soj2sdk-1_3_0_02-linux.binmysql-3.23.33-pc-linux-gnu-i6862.tar.gzopenldap-2.0.7.tar.gzphp-4.0.4pl1.tar.gzjakarta-tomca…

【渝粤题库】广东开放大学 个人与团队管理 形成性考核

题库查询系统 选择题 题目: 按照KOLB学习周期,一个完整的学习过程包含四个阶段,不属于这四个阶段的是( )。 A、获得经验 B、反思 C、认真分析 D、理论化和应用 选择一项&#xf…

使用Spring Boot和Vue进行有益的开发

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。 Vue是一个Web框架,由于它的精简和刻薄,最近引起了很多关注。 …

effective mysql之备份与恢复_Effective MySQL之备份与恢复

第1章五分钟成为一名DBA1.1MySQL备份1.1.1确定数据库的大小1.1.2选择锁策略1.1.3运行时间1.1.4组合信息1.2执行MySQL备份1.2.1运行mysqldump1.2.2安全地备份1.2.3使用mysqldump的好处1.2.4更多信息1.2.5其他选项1.3本章小结第2章理解备份选项第1章五分钟成为一名DBA1.1MySQL备份…

mysql mydumper_系统运维|Mydumper-MySQL数据库备份工具

Mydumper 是 MySQL 数据库服务器备份工具,它比 MySQL 自带的 mysqldump 快很多。它还有在转储的同时获取远程服务器二进制日志文件的能力。Mydumper 的优势并行能力 (因此有高速度) 和性能 (高效的代码避免了耗费 CPU 处理能力的字符集转换过程)更容易管理输出 (每个…

【渝粤题库】广东开放大学 文化传播学 形成性考核

选择题 题目:从人类生活(特别是人类精神生活)的内容与内涵的角度对“文化”界定为:从最为广泛的民族志的意义上看,文化或文明是一个综合性体系,它包括知识、信仰、艺术、道德、法、习俗及作为社会成员的人所…

在日志中搜索时间间隔

介绍 这篇文章与我有关日志分析的迷你系列文章间接相关。 最好阅读两个主要部分,以更好地理解我在说什么。 第1 部分 , 第2部分 。 这篇文章描述了我在实现IDE方法时遇到的一个重要问题。 任务描述 当某人使用日志时,通常只需要调查一个时间…

【渝粤题库】广东开放大学 民事诉讼法 形成性考核

选择题 题目:人民法院认定公民无行为能力的判决作出以后,该公民经过治疗,病情得到好转,逐渐又恢复了民事行为能力。对此种情况,人民法院根据利害关系人的申请,应当如何处理?( &#…

mysql names gb2312_mysql_query(set names gb2312)设置客户端字符集

$connmysql_connect("localhost","root","123456");mysql_select_db("db_bcty365",$conn);mysql_query("set names gb2312");?>其中:SET NAMES ‘x‘语句与这三个语句等价:mysql> SET charact…

【渝粤题库】广东开放大学 系统工程 形成性考核

​👉关注我,看答案👈 选择题 题目:自组织是( )因素相互作用的结果,是复杂系统追求的目标。 题目:系统科学体系中,应当区分基础科学与技术科学。例如,基础科学包括运筹学、信息论、控制论等。 题…

【渝粤题库】广东开放大学 计算机网络 形成性考核

选择题 题目:随着微型计算机的广泛应用,大量的微型计算机是通过局域网连入广域网,而局域网域广域网的互连是通过 实现的。 题目:网络是分布在不同地理位置的多个独立的 的集合。 题目:在OSI参考模型中,在网…

php加mySQL制作网络硬盘_PHP实现的简单网络硬盘

/p>"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">disk online.font {font-family: Consolas;color: #369;font-size: 12px;}.box {font-family: Consolas;font-size: 13px;color: #369;border: 1px solid #000;}.btn {font-family: "微软雅…

vue调用手机相机相册_详解Vue调用手机相机和相册以及上传

组件选中{{imgList.length}}张文件,共{{bytesToSize(this.size)}}javaScript代码export default {name: "cameras-and-albums",data(){return{imgList: [],datas: new FormData(),files:0,size:0}},methods:{//调用相册&相机fileClick() {$(#upload_f…

在mysql中删除表中字段_MySQL中的表中增加删除字段

1.增加一个字段alter table user表 add COLUMN new1字段 VARCHAR(20) NOT NULL DEFAULT 0; //增加一个字段,VARCHERA 20 , 不为空,默认值是 0//增加多个alter table user表add COLUMN new1字段 VARCHAR(20) NOT NULL DEFAULT 0,add COLUMN new2字段 VARCHAR(20) NOT NULL…

红旗linux mysql_恢复 - 红旗Linux案例精选:Amanda集中备份实例详细讲解_数据库技术_Linux公社-Linux系统门户网站...

五、恢复假定我们需要恢复cp3上一些丢失的数据,首先用amandabackup帐号登录cp2机器,创建/etc/amanda/amanda-client.conf文件,内容如下:## amanda.conf - sample Amanda client configuration file.## This file normally goes in…

python 语音识别机器人控制系统_python实现百度语音识别api

本文实例为大家分享了python实现百度语音识别的具体代码,供大家参考,具体内容如下详细百度语音识别api文档先下载python用SDK,可以用python setup.py install安装 # 引入Speech SDKfrom aip import AipSpeech# 定义常量APP_ID 你的 App IDAP…