oauth2.0协议流程_正确的工作流程:我应该使用哪个OAuth 2.0流程?

oauth2.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

oauth2.0协议流程

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

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

相关文章

远程Linux主机安装zsh插件zsh-syntax-highlighting

安装说明: https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/INSTALL.md 根据安装说明: 1.Clone this repository in oh-my-zsh’s plugins directory: git clone https://github.com/zsh-users/zsh-syntax-highlightin…

scare机器人如何手眼标定_基于视觉伺服的工业机器人系统研究(摄像机标定、手眼标定、目标单目定位)...

击上方“新机器视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达标定技术常见的机器人视觉伺服中要实现像素坐标与实际坐标的转换,首先就要进行标定,对于实现视觉伺服控制,这里的标定不仅包括摄像机标定…

单元测试junit参数_使用Junit参数在更少的时间内编写更好的单元测试

单元测试junit参数大多数人都知道单元测试的重要性和好处,以及为什么要在进行的项目中使用它们。 而且,大多数人不喜欢在他们从事的项目中编写单元测试。 TDD的人当然处于另一面,但根据我的经验,他们在IT行业中是少数派。 说到我…

Linux CentOS安装zsh插件提示/usr/bin/env: python: No such file or directory。

执行 ./install.py 文件时,提示: /usr/bin/env: python: No such file or directory查看系统已安装的 python 版本: ➜ ~ ls -l /usr/bin | grep python lrwxrwxrwx 1 root root 36 11月 2 18:11 python -> /etc/alternativ…

3l如何使用_慢阻肺患者如何选购呼吸机和制氧机,需要注意哪些?

慢阻肺(COPD)是慢性阻塞性肺疾病的简称,进一步发展为肺心病和呼吸衰竭的常见慢性疾病。与有害气体及有害颗粒的异常炎症反应有关,致残率和病死率很高,全球大约有2.1亿人患有慢阻肺,中国大概约有4000-8000万人。慢阻肺已成为全球范…

apache ignite_通过示例获取Apache Ignite Baseline拓扑

apache ignite点燃基准拓扑或BLT代表群集中的一组服务器节点,这些服务器节点将数据持久存储在磁盘上。 其中,N1-2和N5服务器节点是具有本机持久性的Ignite集群的成员,该集群使数据能够持久存储在磁盘上。 N3-4和N6服务器节点是Ignite群集的…

自定义报错返回_MybatisPlus基础篇学习笔记(五)------自定义sql及分页查询

本章目录自定义sql分页查询1. 自定义sql在dao文件中编写自定义接口,并在方法上使用注解形式注入SQL,如图所示:第一种:第二种① application.yml加入下面配置mybatis-plus:mapper-locations: com/ethan/mapper/*② MemberMapper.ja…

精简jdk包_具有JDK 12精简数字格式的自定义精简数字模式

精简jdk包帖子“ 紧凑数字格式出现在JDK 12中 ”已经成为有关Java subreddit线程的讨论主题 。 在那个线程中表达的与紧凑数字格式表示有关的问题涉及显示的精度数字和显示的紧凑数字模式。 可以通过使用CompactNumberFormat.setMinimumFractionDigits(int)来解决精度数字问题&…

两个数相乘积一定比每个因数都大_人教版五年级数学:因数、倍数与分数的整理与复习...

写在前面的话:因数与倍数和分数基本性质之间存在紧密的联系,可以将之放在一起学习,对分数基本性质的学习有促进作用,分数的基本性质对分数的加法和减法也非常重要,因此可以放在一起学习、复习。【整理与复习】因数与倍…

Linux中在zsh下如何安装autojump

文章目录介绍安装介绍 autojump is a faster way to navigate your filesystem. It works by maintaining a database of the directories you use the most from the command line. Directories must be visited first before they can be jumped to. 关于 autojump 有以下几个…

fork join框架_Java中的Fork / Join框架的简要概述

fork join框架Fork / Join框架是使用并发分治法解决问题的框架。 引入它们是为了补充现有的并发API。 在介绍它们之前,现有的ExecutorService实现是运行异步任务的流行选择,但是当任务同质且独立时,它们会发挥最佳作用。 运行依赖的任务并使用…

3模型大小_Github推荐一个国内牛人开发的超轻量级通用人脸检测模型

Ultra-Light-Fast-Generic-Face-Detector-1MB1MB轻量级通用人脸检测模型作者表示该模型设计是为了边缘计算设备以及低功耗设备(如arm)设计的实时超轻量级通用人脸检测模型。它可以用于arm等低功耗计算设备,实现实时的通用场景人脸。检测推理同…

macOS如何使用命令启动服务/停止服务/查看服务

文章目录开启服务停止服务查看服务是否启动开启服务 使用命令开启 sshd 服务: $ sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist注:成功启动不会有任何输出 停止服务 $ sudo launchctl unload -w /System/Library/LaunchDaemons/s…

如何在用例之间传递值_如何从0搭建自己的自动化测试体系

大家好,我是爱吃面条,今天给大家讲讲如何从0搭建自己的自动化测试体系1. 需求和目标在我开展自动化测试之前,其实该项目以前的测试人员也已经写了很多的接口测试用例,但是大多数用例处于“半瘫痪”状态,在CI上无人维护…

envoy api 网关_为Envoy构建控制平面的指南-特定于域的配置API

envoy api 网关建立您的控制平面交互点和API表面 一旦考虑了哪些组件可能构成控制平面体系结构(请参见上一章),您将要确切考虑用户将如何与控制平面进行交互,甚至更重要的是, 用户将是谁? 要回答这个问题&a…

异步非阻塞_细说同步异步、阻塞非阻塞

同步、异步同步、异步分别指的是一种通讯方式,当 cpu 不需要执行线程上下文切换就能完成任务,此时便认为这种通讯方式是同步的,相对的如果存在cpu 上下文切换,这种方式便是异步。这里通过一个去食堂打饭的示例来理解什么是同步、异…

如何将网页部署到maven_如何通过Rultor将Maven工件部署到CloudRepo

如何将网页部署到maven在我以前的文章中 ,我描述了如何在Amazon S3中设置私有Maven存储库并通过Rultor进行部署。 如果您熟悉管理Amazon Web Services(AWS), S3和AWS Identity and Access Management(IAM)的…

macOS下如何使用命令启动数据库/停止数据库/重启数据库(MySQL)

文章目录启动数据库手动启动数据库自启动数据库查看数据库服务是否启动重启数据库服务停止数据库服务注意使用 sudo 执行命令会报错,所以不要使用 sudo: sudo mysql.server start . ERROR! The server quit without updating PID file (/usr/local/var/…

table 多行 宽度不一致_layui table 中固定列的行高和table行高不一致

Pipe(点积叉积的应用POJ1039)Pipe Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9723 Accepted: 2964 Description ...cocos2d-x之CCMotionStreak类——2013-08-25 16在游戏的实现过程中,有时会需要…

java rest框架_比较Java REST文档框架

java rest框架决定在记录REST API时选择哪种Java框架可能很麻烦。 在本博文中,我们将简要比较我们自己使用的REST Web服务的三个文档框架,以及它们如何与Spring框架(这是Foreach中最常用的Java框架)集成。 这些是RESTful API建模语…