什么是OAuth 2.0

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

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

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

客户证书授予

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


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

什么时候使用?

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

授权码授予

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


  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。


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

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

隐性补助金

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

什么时候使用?

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

资源所有者密码凭证授予

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


  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

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

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

    oauth2.0协议流程 什么是OAuth 2.0 OAuth 2.0是一个已被广泛采用的委托授权框架,已经存在了很多年,并且似乎已经存在. 如果您不熟悉OAuth 2.0的基本概念,可以使用 川崎孝 ...

  2. 【如何正确处理工作中的错误?】

    在工作中,失误是不可避免的.无论你多么仔细地完成任务,都有可能会发生意外的错误.但是,关键在于如何处理这些失误,以便从中吸取教训并避免再次犯错. 当出现失误时,请不要惊慌失措.保持冷静,收集所有相关信 ...

  3. 向上管理:如何正确汇报工作

    作者:文艺小青年 链接:https://www.zhihu.com/question/39854128/answer/152738847 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商 ...

  4. 如何树立正确的工作态度

    <如何树立正确的工作态度> 公众号:"王堃阳口才前线"专注演讲口才20年,学演说找王堃阳,专治各种不会说! 个人执行力的强弱取决于两个要素--个人能力和工作态度,能力是 ...

  5. 读《向上管理的艺术:如何正确汇报工作》感悟

    背景 一天,男神在微信上发给我这本<向上管理的艺术:如何正确汇报工作>,然后没有说一句话. 我看到这个,心里很是激动.因为他总是说自己很忙.很累.我就建议他其他做不到,最起码也要逐渐使用方 ...

  6. (多线程同步练习)桌子上有一只盘子,每次只能放一只水果,爸爸专向盘子中放苹果,妈妈专向盘子中放橘子,一个儿子专等吃盘子里的橘子,一个女儿专等吃盘子里的苹果。写出能使爸爸、妈妈、儿子、女儿正确同步工作的

    这是操作系统的一道课堂练习题 题目完整描述: 桌子上有一只盘子,每次只能放一只水果,爸爸专向盘子中放苹果,妈妈专向盘子中放橘子,一个儿子专等吃盘子里的橘子,一个女儿专等吃盘子里的苹果.写出能使爸爸.妈 ...

  7. 如何才是有效的、正确的工作方式?

    如何才是有效的.正确的工作方式? 高效人士善于结果驱动.他们未必动作更快,而是更善于判断,什么事情对结果是最有效的,然后有计划的工作,用尽一切办法保证结果达成,而不是死守着原有的工作任务. 而低效人士 ...

  8. 计算机下记账凭证处理流程,第一节 电算化会计核算基本流程

    第四章 会计核算软件的操作要求 第一节 电算化会计核算基本流程 一.电算化与手工会计信息系统的共同特征 1.数据量大.数据结构复杂: 2.数据的全面性.完整性.真实性.准确性要求严格: 3.数据的安全 ...

  9. ERP流程入门_从会计分录理解企业基本流程[转]

    ERP流程入门_从会计分录理解企业基本流程 本贴写给尚未在企业工作过的朋友!了解企业的基本流程的一个方法是看它的会计分录,我们现在来看一个完整的企业基本流程,它的会计分录是如何做的,其中有些帐户名称可 ...

最新文章

  1. Windows实现appium+iOS自动化测试
  2. 西安网络推广浅谈SEO优化旧内容页面能不能删?怎么删?
  3. 【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 权限申请原理对话框操作回调接口 | 永久拒绝权限后引导设用户置权限 )
  4. 一致性哈希解决的问题
  5. mysql(mariadb)重装
  6. 95-10-200-启动-结尾
  7. EBS 请求输出Html报表集成Echarts
  8. 以下关于c语言中static和const,c语言中static const作用
  9. Java开发人员可以从Spring框架中学到编程技巧
  10. MVC 中通用导出页面数据到Excel
  11. Spyder中文版补丁下载及安装
  12. 备战数学建模22-数学建模论文写作规范总结
  13. 阿里巴巴开放平台Oauth2.0协议获取access_token
  14. 游戏模型制作的注意事项 项目模型规范总结
  15. 计算机毕业设计SSM大学生体检管理系统【附源码数据库】
  16. 图解:什么是图?(以“图”话图)
  17. dubbo中标签的使用
  18. js逆向--有道翻译
  19. 持续交付的软件系统架构
  20. BeanFactory和applicationContext区别

热门文章

  1. Apache Druid(一)简介
  2. 使用Docker 实现微服务并搭建博客,一文全掌握
  3. ACID中C与CAP定理中C的区别
  4. Java se之动态代理
  5. javaweb项目搭建ehcache缓存系统
  6. 聊聊并发(八)——Fork/Join框架介绍
  7. 几天没写代码,就……
  8. 《走遍中国》珍藏版(十二)
  9. JS浏览器加载一个页面的过程
  10. mmall工程生成dao层的插件出错了出错了 自动生成mapper 的插件出错了