OAuth从1.0到2.1的发展之路

 更新时间:2021年11月23日 16:23:35   作者:SpringLeee  
OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。简单来说就是提供除了"账户密码"验证方式以外的验证授权方式。这篇文章介绍了OAuth从1.0到2.1的发展之路,感兴趣的同学可以收藏一下

背景

2010年, OAuth 授权规范 1.0 (rfc 5849) 版本发布, 2年后, 更简单易用的 OAuth 2.0 规范发布(rfc 6749), 这也是大家最熟悉并且在互联网上使用最广泛的版本, 在2012年的时候, iPhone 5 是全新的, 微软最新的浏览器还是 IE9, 单页面应用在当时还被称作 "Ajax 应用", CORS(跨域资源共享)还不是一个W3C标准。

到现在, 网络和移动领域发生了巨大的变化, 当时发布的授权协议标准已经远远不能满足现在的场景和需求, 为了应对这种不断变化的局面, OAuth 社区多年来一直在修补和扩展 OAuth 规范, OAuth 的格局也不断扩大, 越来越多的围绕 OAuth 2.0 core 的扩展授权规范出现, 也让 OAuth 2.0 整体看起来就像一个迷宫一样。

不断进化的 OAuth 2.0

在 OAuth 2.0 核心规范 (RFC 6749)中, 定义了四种授权类型:授权码、隐式、密码和客户端凭据, 如下:

相信大家都很熟悉, 在 OAuth 2.0 中,最安全也是使用最普遍的就是授权码模式, 而对于本地应用,移动应用来说, 通常会使用隐式和密码授权, 这两种本身就是不安全的, 因为这些属于公开的客户端, 本身没有能力保护客户端机密, 但是当时并没有其它好的方案。

为了解决 OAuth 2.0 对公开客户端的授权安全问题, PKCE (RFC 6379)协议应运而生, 全称是 Proof Key for Code Exchange,PKCE 的原理是, 对于公共的客户端, 如果不能使用客户端秘钥(client_secret), 那客户端就提供一个自创建的证明 (code_verifier) 给授权服务器,其中使用了加密算法, 授权服务器通过它来验证客户端。

后来,"OAuth 2.0 for Native Apps"(RFC 8252)规范发布,推荐原生应用也使用授权码 + PKCE。

随着技术不断地发展, 出现了设备授权的场景, 这里设备指智能电视,打印机等, 和传统的PC或者手机不同, 这种设备是缺少浏览器或者键盘的,那 OAuth 2.0 常规的授权模式肯定是不能满足的, 于是就出现了设备授权(Device Grant) 。

在 OAuth 2.0 安全最佳实践(Security BCP)中, 弃用了隐式和密码授权,并且推荐所有的客户端都应该使用 Authorization Code + PKCE 的组合。

最终, 调整后的 OAuth 授权模式会更加精简, 转换成下面三种, 这也是 OAuth 2.1 的思想, 参考安全最佳实践(BCP),取其精华, 去其糟粕。

总结

归根结底, OAuth 2.1 并不是要推翻 OAuth 2.0,而是根据其安全最佳实践(BCP), 移除不安全的授权流程, 并且对扩展协议进行整合, 让原本复杂如迷宫的 OAuth 2.0 规范成为更易用,更安全的授权规范。

参考资料

The OAuth 1.0 Protocol
The OAuth 2.0 Authorization Framework
The OAuth 2.1 Authorization Framework draft-ietf-oauth-v2-1-04
It's Time for OAuth 2.1
OAuth 2.0 for Native Apps
OAuth 2.0 Device Authorization Grant
Proof Key for Code Exchange by OAuth Public Clients

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • VSCode Web IDE Coder 安装及使用

    VSCode Web IDE Coder 安装及使用

    Coder是VS Code的Web IDE,分Code Server 和 Coder,Code Server安装在服务器上,通过浏览器打开地址后可以使用一个web版的VS Code,也就是Coder,但VS Code的插件无法使用。这篇文章主要介绍了VSCode Web IDE Coder 安装及使用,需要的朋友可以参考下
    2021-12-12
  • 各种语言、服务器301跳转代码全集

    各种语言、服务器301跳转代码全集

    这篇文章主要介绍了各种语言、服务器301跳转代码全集,本文讲解了IIS下301设置、ASP下的301转向代码、ASP.Net下的301转向代码、PHP下的301转向代码 、CGI Perl下的301转向代码、JSP下的301转向代码等内容,需要的朋友可以参考下
    2015-04-04
  • Xshell 6安装和使用教程详解

    Xshell 6安装和使用教程详解

    这篇文章主要介绍了Xshell 6安装和使用教程,Xshell 6支持Windows 平台远程协议Telnet、Rlogin、SSH1/SSH2 PKCS#11、SFTP、Serial,本文给大家讲解的非常详细需要的朋友可以参考下
    2022-11-11
  • Idea 2022激活码最新汇总(亲测有效)

    Idea 2022激活码最新汇总(亲测有效)

    JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。今天给大家分享大批IDEA 激活码到期之后的乱象,大家可以参考下
    2020-07-07
  • 多种语言(big5\gbk\gb2312\utf8\Shift_JIS\iso8859-1)的网页编码切换解决方案归纳

    多种语言(big5\gbk\gb2312\utf8\Shift_JIS\iso8859-1)的网页编码切换解决方案归纳

    多种语言(big5\gbk\gb2312\utf8\Shift_JIS\iso8859-1)的网页编码切换解决方案归纳
    2012-06-06
  • 超实用Internet Download Manager(IDM)破解注册码,全版本通用

    超实用Internet Download Manager(IDM)破解注册码,全版本通用

    IDM下载器是一个十分好用的文件下载工具。IDM下载器它能够帮助你提升5倍的下载速度,强大的续传功能,让你不再担心因网络问题、计算机宕机、停电等原因所造成的数据不全问题,下面小编给大家带来了Internet Download Manager(IDM)破解注册码,感兴趣的朋友参考下吧
    2023-01-01
  • WebStorm安装配置教程

    WebStorm安装配置教程

    WebStorm 是jetbrains公司旗下一款JavaScript开发工具,这篇文章主要为大家详细介绍了WebStorm安装教程,文中安装步骤非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • 科学知识:时间复杂度计算方法

    科学知识:时间复杂度计算方法

    这篇文章主要介绍了科学知识:时间复杂度计算方法,本文介绍了问题的定义、时间复杂度计算步骤、时间复杂度计算规则等内容,需要的朋友可以参考下
    2015-05-05
  • 24种编程语言的Hello World程序

    24种编程语言的Hello World程序

    这篇文章主要介绍了24种编程语言的Hello World程序,包括熟知的Java、C语言、C++、C#、Ruby、Python、PHP等编程语言,需要的朋友可以参考下
    2015-06-06
  • 编译和解释的区别是什么

    编译和解释的区别是什么

    最近发现有很多网友都提出一个问题:程序的编译与解释有什么区别?这篇文章就为大家介绍了编译和解释的区别,需要的朋友可以参考下
    2016-12-12

最新评论