What is the purpose of a “Refresh Token”?

问题:我有一个与 YouTube Live Streaming API 集成的程序。我以每 50 分钟的时间间隔,使用刷新令牌(refresh token)获取一个新的访问令牌(Access Token)。 我的问题是,为什么 OAuth 要设计双重 token?

当我通过 YouTube 进行身份验证时,它给了我一个刷新令牌。然后我使用这个刷新令牌大约每小时获取一个新的访问令牌。 如果我有刷新令牌,我总是可以使用它来获取新的访问令牌,因为它永远不会过期。所以我不认为这比从一开始就给我一个访问令牌更安全。

回答

简单地说,刷新令牌用于获取新的访问令牌。

为了清楚地区分这两个令牌并避免混淆,以下是 OAuth 2.0 授权框架中给出的功能:

  • 访问令牌由授权服务器在资源所有者的批准下颁发给第三方客户端。客户端使用访问令牌访问由资源服务器托管的受保护资源。刷新令牌是用于获取访问令牌的凭据。

  • 刷新令牌由授权服务器颁发给客户端,用于在当前访问令牌失效或过期时获取新的访问令牌,或者获取具有相同或更窄范围的附加访问令牌。

出于安全原因,refresh_token 只与授权服务器交换,而 access_token 与资源服务器交换。这降低了“访问令牌有效期为一小时,刷新令牌有效期为一年或撤销前有效”与“访问令牌有效直至撤销而无需刷新”中长期存在的 access_token 泄漏的风险。

刷新令牌至少有两个用途。首先,刷新令牌是一种“证明”,表明 OAuth2 客户端已经从用户那里获得了访问其数据的许可,因此可以再次请求新的访问令牌,而无需用户通过整个 OAuth2 流程。其次,与长期访问令牌相比,它有助于增加整个安全流程。

刷新令牌作为不影响用户体验的一种方式

让我们用一个例子来谈谈第一个目的。假设您是一名用户,正在使用想要与您的 YouTube 帐户数据进行交互的第三方客户端网络应用程序。一旦您授予客户端应用程序使用您的 YouTube 数据的权限,您是否希望客户端应用程序在其 YouTube 令牌过期时再次提示您获得许可?如果 YouTube 令牌到期时间非常短(例如 5 分钟),会发生什么?

如果客户端应用程序至少每 5 分钟提示您一次许可,那会有点烦人! OAuth2 针对这个“问题”提出的解决方案是刷新令牌。通过使用刷新令牌,访问令牌可以保持短暂的生命周期(这在访问令牌以某种方式泄露或被盗的情况下是可取的),并且刷新令牌可以保持长期(更)生命周期,从而允许客户端获得新的访问权限令牌过期时无需用户再次许可。

但是为什么要刷新令牌呢?如果重点是不让用户使用权限请求,那么为什么客户端不能简单地说“嘿,授权服务器,我想要另一个访问令牌。而是,“嘿授权服务器,这是我过期的令牌,给我一个新的!”。刷新令牌作为一种“证明”,证明客户端在某个原始时间点被用户授予访问权限。该“证明”采用由授权服务器数字签名的刷新令牌的形式。通过客户端提供刷新令牌,授权服务器可以验证客户端在过去的某个时间点收到了用户的许可,并且客户端不必再次提示用户。

刷新令牌作为提高安全性的一种手段

然而,这提出了一个问题,“好吧,如果刷新令牌被泄露或被盗,或者只是被恶意客户端应用程序保留而没有应用户的要求将其删除,会发生什么?攻击者能不能继续使用刷新令牌无限期地(或直到它过期)获得有效的访问令牌?这个问题导致讨论我提到的第二个目的,刷新令牌有助于更安全的流程。

访问令牌出现的问题是,一旦获得,它们只会呈现给资源服务器(例如 YouTube)。因此,如果访问令牌被盗或泄露,您如何告诉资源服务器不要信任该令牌?好吧,你真的不能。唯一的方法是更改​​授权服务器上的私有签名密钥(首先对令牌进行签名的密钥)。

另一方面,刷新令牌需要频繁地提交给授权服务器,因此如果一个令牌被泄露,那么撤销或拒绝整个刷新令牌是微不足道的,而不必更改任何签名密钥。

access token (the one that expires soonest) is stored in local storage
refresh token only stored in memory for security reasons
that is why if you refresh after first time period, you have to log in

关于 refresh token 的超时时间

if your access token expired, and it was refreshed using the refresh token --> that doesn’t make the refresh token duration reset. The refresh token’s timeout will continue to tick from the moment you first logged in

为什么 OAuth 里除了 Access Token 之外,还需要 Refresh Token?相关推荐

  1. JWT Token、ID Token、Access Token、Refresh Token

    JWT 简介 JSON Web Token (JWT,RFC 7519 (opens new window)),是为了在网络应用环境间传递声明而执行的一种基于 JSON 的开放标准((RFC 7519 ...

  2. SAP云平台CloudFoundry的Access Token和refresh token

    refresh token -> access token 换取的access token,因为security原因,没有以明文的方式显示在控制台里: 要获取更多Jerry的原创文章,请关注公众 ...

  3. 生物识别包含人脸识别门禁之外还包含哪种识别种类

    生物识别包含人脸识别门禁之外还包含哪种识别种类 在现阶段的研究和行业使用率,生物特征识别主要关系到计算机视觉.图象处理与模式识别.计算机听觉.语音处理.多传感器技术.虚拟现实.计算机图形学.可视化技术 ...

  4. Access Token 与 Refresh Token【转载哒科普啊】

    Access Token 与 Refresh Token access token 是客户端访问资源服务器的令牌.拥有这个令牌代表着得到用户的授权.然而,这个授权应该是临时的,有一定有效期.这是因为, ...

  5. 爬虫python能做什么-Python除了能做爬虫之外还能做什么?

    原标题:Python除了能做爬虫之外还能做什么? 1.web开发python拥有非常完善的与web服务器进行交互的库,以及大量的免费的前端网页模板.更具优势的是,有非常优秀且成熟的Django Web ...

  6. DAO,除了协议、社交、媒体、服务之外还能发展哪个领域?

    DAO,除了协议.社交.媒体.服务之外还能发展哪个领域? 互联网为通信做了什么,DAO也可以为资本做什么. 互联网和社交网络使得志同道合的人比以往任何时候都更容易交流,而且不受地理位置的限制.数字原生 ...

  7. try catch finally,try里有return,finally还执行么?

    try catch finally,try里有return,finally还执行么? 答案:执行,并且返回return时,finally的执行早于try. 结论: 1.不管有没有出现异常,finall ...

  8. U盘里的东西删除了还能恢复吗?U盘删除的文件如何恢复

    U盘里的东西删除了还能恢复吗?U盘对于办公室工作人员或者出差的朋友而言是必不可少的一个工具了,通常里面都存放着我们个人或单位的重要资料,成为人们日常生活中不可或缺的一部分.由于对U盘的需求量增加,如今 ...

  9. oauth2.0授权协议中刷新令牌refresh token的工作原理及生命周期分析

    在学习oauth2.0协议的时候,对于刷新令牌refresh token感觉很困惑.主要是为啥需要刷新令牌,以及刷新令牌是如何工作的,技术细节是啥?比如通过refresh token可以让access ...

最新文章

  1. 一个AI产品经理怎么看AI的发展
  2. express开发实例
  3. FFmpeg NDK跨平台交叉编译
  4. Ranger-Kylin插件安装
  5. python用什么软件编程-python开发用什么编辑器
  6. 使用wget下载GLDAS数据
  7. java 进度条时间设置_java进度条时间显示怎么实现?
  8. 传谷歌金山秘密合作研发Office软件
  9. 「双拼输入法安利」清欢实践了四个月,真的好用!
  10. 【渝粤教育】电大中专学前教育学_1作业 题库
  11. 如何把很多照片拼成一张照片_把很多小照片拼成一张大照片是怎么做的?
  12. PPT如何制作形状动画?
  13. sap 查询数据 未分离版本
  14. 基于有道翻译的英翻中微信小程序
  15. 【ARC 123B】Increasing Triples(贪心)
  16. 视频按帧截取 python程序
  17. Scrum入门基础系列之Scrum起源
  18. iOS蓝牙开发总结及Demo
  19. # 使用Scratch 3.0制作弹球游戏(三)——游戏关卡及难度设计
  20. dns辅服务器未响应是网卡受损,DNS服务器未响应一键修复教程

热门文章

  1. JavaScript中发布/订阅模式的理解
  2. JDBC连接不同数据库的连接参数
  3. lnmp搭建的常见错误
  4. 职场‘下班沉默症’调查
  5. C#生成CHM文件(中级篇)
  6. 5.4. Interaction Between Devices and Kernel 设备与内核的交互
  7. Adwords 账户细分思路
  8. python线程(二)代码部分Threading模块
  9. AS3 --调用Js
  10. os.walk() 遍历目录下的文件夹和文件