既生瑜何生亮 access_token VS refresh_token

2cda9ca909e989bb7b0a70ac412128e7.png

中国有句老话, 既生瑜何生亮, 既然有我周瑜在世, 为什么老天还要一个诸葛亮啊?

同样的, 众所周知, 在 OAuth 2.0 授权协议中, 也有两个令牌 token , 分别是 access_token 和 refresh_token, 为什么已经有了 access_token, 还需要 refresh_token 呢?

我们先看下面两者的介绍

  • access_token 访问令牌, 它是一个用来访问受保护资源的凭证

  • refresh_token 刷新令牌, 它是一个用来获取access token的凭证

下面是 OAuth 2.0 中的 token 工作流程图

6c5dca512964cccc1ef89fa38c693158.png

两个令牌的主要区别如下:

  • access_token 时效短, refresh_token 时效长, 比如 access_token 有效期1个小时, refresh_token 有效期1天

  • access_token 是授权服务器一定颁发的, 而 refresh_token 却是可选的

  • access_token 过期后, 可以使用 refresh_token 重新获取, 而 refresh_token 过期后就只能重新授权了, 也没有 refresh_refresh_token

  • access_token 和 资源服务器和授权服务器交互, 而 refresh_token 只和授权服务器交互

  • access_token 颁发后可以直接使用, 而使用 refresh_token 需要客户端秘钥 client_secret

接下来, 我们继续看两个令牌在下面场景的应用, 假设有一个用户需要在后台管理界面上操作6个小时。

1 颁发一个有效性很长的 access_token, 比如 6 个小时, 或者可以更长, 这样用户只需要刚开始登录一次, access_token 可以一直使用, 直到 access_token 过期, 然后重复, 这种是不安全的, access_token 的时效太长, 也就失去了本身的意义。

cd653b8bc0921e20cf87d54c85cd7f91.png

2 颁发一个1小时有效期的 access_token, 过期后重新登录授权, 这样用户需要登录 6 次, 安全倒是有了, 但是用户体验极差

1b270f902dd44f4c14022d18e31bf8cf.png

3 颁发1小时有效期的 access_token 和6小时有效期的 refresh_token, 当 access_token 过期后(或者快要过期的时候), 使用 refresh_token 获取一个新的 access_token, 直到 refresh_token 过期, 用户重新登录, 这样整个过程中,用户只需要登录一次, 用户体验好。

access_token 泄露了怎么办? 没关系, 它很快就会过期。
refresh_token 泄露了怎么办? 没关系, 使用 refresh_token 是需要客户端秘钥 client_secret 的。

6701e9470de04571a0c64952716882d9.png

4 用户登录后, 在后台管理页面上操作1个小时后, 离开了一段时间, 然后 5个小时后, 回到管理页面继续操作, 此时 refresh_token 有效期6个小时, 一直没有过期, 也就可以换取新的 access_token, 用户在这个过程中, 可以不用重复登录。但是在一些安全要求较高的系统中, 第二次操作是需要重新登录的, 即使 refresh_token 没有过期, 因为中间有几个小时, 用户是没有操作的, 系统猜测用户已离开, 并关闭会话。

bd141906ba58af722d06b5de4509f588.png

所以, 得出的结论是, refresh_token 是一个很巧妙地设计, 提升了用户体验的同时, 又保证了安全性。

另外, 在 OAuth 2.0 安全最佳实践中, 推荐 refresh_token 是一次性的, 什么意思呢? 使用 refresh_token 获取 access_token 时, 同时会返回一个 新的 refresh_token, 之前的 refresh_token 就会失效, 但是两个 refresh_token 的绝对过期时间是一样的, 所以不会存在 refresh_token 快过期就获取一个新的, 然后重复,永不过期的情况。  

往期推荐:

OAuth 2.0 的探险之旅

OAuth 2.0 扩展协议之 PKCE

OAuth 2.1 的进化之路

OAuth 2.1 带来了哪些变化

37a0cc113669131d00a1b6ae30173a3f.png

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

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

相关文章

IT English Collection(9) of Objective-C

1 前言 今天我们来解除一篇有关Objective-C的介绍文章,详情如下。 2 详述 2.1 原文 Objective-C defines a small but powerful set of extensions to the ANSI C programming language that enables sophisticated object-oriented programming. Objective-C is th…

关于计算机软件系统的知识,二、计算机软件系统基本知识

一、计算机软件系统图示咱们先来直观的看一下,我就直接上图了打开今日头条,查看更多精彩图片计算机软件系统(一)系统软件在说系统软件之前我想用一张图让大家清晰的了解下,计算机硬件系统与软件系统的关系:计算机硬件系统与软件系…

Android之RxJava(一)

RxJava(一) 翻译地址: http://blog.danlew.net/2014/09/15/grokking-rxjava-part-1/ RxJava这段时间在Android开发者之间变得越来越火。 唯一的问题是,很难理解。 特别大部分人之前都是使用命令式编程语言。但是一旦你理解它,它是很完美的! 在这里帮你更好理解RxJava。 一共有…

#周末课堂# 赵扬老师 Android系列课程【ListView完全解析、Memory in Android】(火热报名中~~~)...

课程名称:课程一: Android晋级系列讲座之ListView完全解析(中级课程)课程二: Memory in Android(高级课程) 讲师资料:讲师 - 赵杨 - Android高级讲师开课信息:招募学员&a…

Nature评选年度十大科学发现:北师大博士凭借天眼研究入选!

全世界只有3.14 % 的人关注了爆炸吧知识本文来源:Bio生物世界、北京师范大学新闻网、百度百科、北京师范大学官网近日,Nature 盘点了2020年度十大科学发现,这其中即包括新冠病毒研究、冷冻电镜突破、压力导致白发的原因、HIV治疗、银河系中的…

Android之集成友盟推送功能

友盟是中国最大的移动开发者服务平台,为移动开发者提供免费的应用统计分析、社交分享、消息推送、自动更新、在线参数、移动推广效果分析、微社区等app开发和运营解决方案。 如何快速集成友盟推送功能: 1. 注册友盟账号 友盟开发者账号的注册地址:http://www.umeng.…

NSValue包装自定义结构体

typedef struct {int year;int month;int day; }Date;void value(){Date date {2013,9,30},//void *代表任何类型的指针//这里要穿结构图的地址&date//根据结构体类型生成对应的描述字符串char* type encode(Date);NSValue *value[NSValue value:&date withO…

HTML手机上图片显示被压扁,在重新调整Web浏览器HTML |时,文本会被压扁CSS

我无法准确地说出你希望它如何在你的问题中发挥作用。如果您希望font-size根据浏览器的视图大小动态更改,则可以使用vw单位(请参阅下面的jsfiddle预览和代码示例)。我使用了你在Pastebin上发布的HTML和CSS,但是我在原始帖子中添加了CSS并进行了编辑。我的…

Win11手机应用大改!全新界面来袭

在 Windows 11 中,应用商店、画图、照片、计算器等系统内置应用都获得了全新的改进,这回终于轮到你的手机应用了。在今年 9 月的微软 Windows 11 硬件暨全新 Surface 设备发布会上,微软曾简要地展示了 Windows 11 内置应用 Your Phone&#x…

标记为可序列化

序列化是指将对象实例的状态存储到存储媒体的过程。在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象…

serialization机制

首先说明一下序列化的知识: java中的序列化(serialization)机制能够将一个实例对象的状态信息写入到一个字节流中,使其可以通过socket进行传输、或者持久化存储到数据库或文件系统中;然后在需要的时候,可以根据字节流中的信息来重…

java2的7次方怎么表示_静态市盈率要怎么看?

静态市盈率是估值一个公司质地的指标,同时它也就是大家常说的市盈率。它体现的是一个企业按照目前的盈利水平,我们买入后需要多长时间才能回本。那么静态市盈率高好还是低好呢?静态市盈率低好,高就意味着该股高估了。静态市盈率是…

中国科幻扛鼎之作,原来真的不止刘慈欣

▲ 点击查看50年前的某天,一个小孩和一群大人一起仰望着晴朗的天空,看着中国第一颗人造卫星“东方红一号”,默默地担心它会撞到其他星星。而这份小小的担心,成了他后来开始创造科幻的动力和梦想。这个仰望晴空的小孩叫刘慈欣。如果…

Android之screenOrientation属性

在开发android的应用中,有时候需要限制横竖屏切换。只需要在AndroidManifest.xml文件中加入android:screenOrientation属性限制。 android:screenOrientation="landscape"是限制此页面横屏显示,android:screenOrientation="portrait"是限制此页面数竖屏显…

ubuntu make menuconfig error

主机环境:ubuntu --------------------------------------------------------------在ubuntu系统中,要编译内核,还需要安装一系列相应的工具才行。这篇文章,正是针对这一过程的一次记录,目标是可以通过 make menuconfi…

程学旗 计算机,徐明伟-青年科学家奖-中国计算机学会

2010CCF青年科学家奖获奖者徐明伟 教授清华大学分别于1994年和1998年在清华大学计算机科学与技术系获工学学士和工学博士学位。现为清华大学计算机系教授,博士生导师,网络所所长,计算机学会YOCSEF AC委员,中国通信标准化协会技术管…

.net6给winform带来的新功能

首先简化了Program文件&#xff0c;引入了全局命名空间&#xff0c;但顶级语句由于Main函数的特性[STAThread]没有引用进来。namespace WinFormsDemo {internal static class Program{/// <summary>/// The main entry point for the application./// </summary>[…

男生的哪个“不要”是真的不要?

1 每天一个被炒小技巧&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 今天你能接到水算我输&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 如何形容自己没钱&#xff1f;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 猜中了开头没猜中结…

Git之如何解决Error:pathspec ‘/layout/radar_chart.xml‘ did not match any file(s) known to

不废话&#xff0c;先爆错误图片 问题产生原因&#xff1a; 我把android studio里面的项目提交到github里面的时候&#xff0c;出现了了error: pathspec app/src/main/res/layout/radar_chart.xml did not match any file(s) known to git.&#xff0c;因为我一开始新建了一个文…

江诗丹顿geneve系列_江诗丹顿的另一面

江诗丹顿在售表款目录里&#xff0c;不算阁楼工匠定制系列&#xff0c;你猜最贵的是哪一款&#xff1f;​答案不是包含三问、万年历和陀飞轮功能的传袭系列超卓复杂腕表&#xff0c;而是一枚具有简单时分功能的高级珠宝表款。打开江诗丹顿的官方微信公众号&#xff0c;进入微信…