OAuth从1.0到2.1的发展之路

作者:SpringLeee 时间:2023-09-25 22:30:07 

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从1.0到2.1的发展之路

不断进化的 OAuth 2.0

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

OAuth从1.0到2.1的发展之路

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

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

OAuth从1.0到2.1的发展之路

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

OAuth从1.0到2.1的发展之路

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

OAuth从1.0到2.1的发展之路

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

OAuth从1.0到2.1的发展之路

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

OAuth从1.0到2.1的发展之路

来源:https://www.cnblogs.com/myshowtime/p/15591656.html

标签:OAuth,OAuth2.0,OAuth2.1
0
投稿

猜你喜欢

  • 解决Vue路由导航报错:NavigationDuplicated: Avoided redundant navigation to current location

    2023-07-02 17:08:39
  • Python中内建模块collections如何使用

    2022-12-31 01:43:53
  • Pandas数据分析之批量拆分/合并Excel

    2023-03-28 19:39:58
  • pygame多种方式实现屏保操作(自动切换、鼠标切换、键盘切换)

    2022-12-08 20:39:49
  • CentOS 6.6服务器编译安装lnmp(Nginx1.6.2+MySQL5.6.21+PHP5.6.3)

    2023-11-15 06:40:50
  • python linecache 处理固定格式文本数据的方法

    2022-10-23 21:06:05
  • python 读取txt,json和hdf5文件的实例

    2022-02-18 10:43:34
  • MySQL数据库主从复制原理及作用分析

    2024-01-26 11:42:14
  • Python中re模块常用方法总结分析

    2022-10-27 14:40:20
  • Oracle 查询存储过程做横向报表的方法

    2024-01-16 00:59:55
  • golang语言http协议get拼接参数操作

    2024-05-08 10:45:10
  • python 实现图像快速替换某种颜色

    2021-07-20 03:16:13
  • pandas中read_csv、rolling、expanding用法详解

    2022-03-01 06:09:30
  • 详解vue中async-await的使用误区

    2024-05-09 09:21:06
  • python备份文件的脚本

    2023-12-14 10:52:02
  • 关于mysql查询字符集不匹配问题的解决方法

    2024-01-27 23:53:06
  • 利用Python网络爬虫爬取各大音乐评论的代码

    2023-01-05 19:26:55
  • Python的Django应用程序解决AJAX跨域访问问题的方法

    2023-08-07 16:00:24
  • yolov5 win10 CPU与GPU环境搭建过程

    2021-07-17 15:21:11
  • Django 视图层(view)的使用

    2023-07-02 22:52:45
  • asp之家 网络编程 m.aspxhome.com