Access Token 机制详解
我们在访问很多大公司的开放 api 的时候,都会发现这些 api 要求传递一个 access token 参数。这个参数是什么呢?需要去哪里获取这个 access token 呢?
access token 是在 Oauth2.0 协议中,客户端访问资源服务器时需要带上的令牌(其实就是一段全局唯一的随机字符串)。拥有这个令牌代表着得到用户的授权。令牌里面包含哪些信息呢?答案是:
哪个用户 在什么时候 授权给哪个app 去做什么事情
当然这些信息是不能直接从 access token 看出来的,而是存在平台方的数据库中,平台可以用 access token 作为 key 去查询出这些信息,然后验证调用方是否有权限。
对于 Oauth2.0 不了解的读者,请看这篇文章:简单介绍 Oauth2.0 原理
所以,在调用这些 api 之前,需要先获取到 access token。获取的方法分为三步:
第一步,实现一个 api:
GET /recieve_code?code=
这个 api 接收一个 code 参数。至于接收到 code 之后做什么,在第三步介绍。在这一步,只需提供这个 api 的 url,并且可以在公网访问,里面逻辑可以先不实现。
第二步,当需要调用平台 api 的时候,在你的 app 中打开平台提供的一个授权界面(平台方的 sdk 通常会提供这一步的接口),并且,把第一步中提供的 url 传给这个界面。
这个界面打开后可能类似下面这样:

如果用户同意执行此操作,就会输入账号密码进行授权。授权通过后,平台就会自动调用第一步中提供的 url,并传过来一个 code。
第三步,使用 code 去兑换 access token。
平台必定有一个 api,接收 code 为参数,返回一个 access token 和一个 refresh token。在第一步的 api 中去调用这个平台 api。并且将获得的 access token 和 refresh token 保存在服务器上。到这里,就获取到可用的 access token 了。
然而事情到这里还没完,是不是每一次需要调用平台的开放 api 的时候,都要重新获取一次 access token 呢?答案是否定的。在第三步中获取到的 access token 有一定的有效期,在过期之前可以一直重复使用。那么,access token 过期了之后怎么办呢?
首先,我们怎么知道 access token 已经过期?答案是在使用 access token 去访问平台的开放 api 的时候,如果 access token 已过期,api 会报错,返回一个 token 无效的错误。此时,我们应该用 refresh token 去刷新 access token。具体的做法是查找平台的文档,找到刷新 access token 的 api,这个 api 必定需要 refresh token 作为参数。按照文档去调用就可以了。
Access Token 机制详解的更多相关文章
- Shiro的Filter机制详解---源码分析
Shiro的Filter机制详解 首先从spring-shiro.xml的filter配置说起,先回答两个问题: 1, 为什么相同url规则,后面定义的会覆盖前面定义的(执行的时候只执行最后一个). ...
- MVVMLight消息通知实现机制详解(二)
接上文 MVVMLight消息通知实现机制详解(一) 该工具的内部主要逻辑是以字典模式进行储存持有订阅对象设置的传入参数Type类型.Key值.Action.Target(订阅对象本身) 在发生订阅事 ...
- MVVMLight消息通知实现机制详解(一)
最近对委托.事件的订阅使用的太多,订阅与被订阅之间的绑定约束非常...麻烦,所以翻了下MVVMLight源码找出这段可以拿出来用的部分,详情见下: 一.开发中遇到的问题: 场景1:ClassA中存在事 ...
- Shiro的Filter机制详解---源码分析(转)
Shiro的Filter机制详解 首先从spring-shiro.xml的filter配置说起,先回答两个问题: 1, 为什么相同url规则,后面定义的会覆盖前面定义的(执行的时候只执行最后一个). ...
- IdentityServer4实战 - JWT Token Issuer 详解
原文:IdentityServer4实战 - JWT Token Issuer 详解 一.前言 本文为系列补坑之作,拖了许久决定先把坑填完. 下文演示所用代码采用的 IdentityServer4 版 ...
- Java SPI机制详解
Java SPI机制详解 1.什么是SPI? SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制.SPI是一种动态替换发现的机制, 比如有个 ...
- 从mixin到new和prototype:Javascript原型机制详解
从mixin到new和prototype:Javascript原型机制详解 这是一篇markdown格式的文章,更好的阅读体验请访问我的github,移动端请访问我的博客 继承是为了实现方法的复用 ...
- 浏览器 HTTP 协议缓存机制详解
最近在准备优化日志请求时遇到了一些令人疑惑的问题,比如为什么响应头里出现了两个 cache control.为什么明明设置了 no cache 却还是发请求,为什么多次访问时有时请求里带了 etag, ...
- JVM的垃圾回收机制详解和调优
JVM的垃圾回收机制详解和调优 gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存.java语言并不要求jvm有gc,也没有规定gc如何工作.不过常用的jvm都有gc,而且大多数gc都 ...
随机推荐
- linux安装源码包报错
报错代码1如下: [root@xiaoming nginx-]# ./configure --prefix=/soft/nginx- checking for OS + Linux -.el7.x86 ...
- fcntl()函数之文件打开状态
比较有用的就两个. 1.获得/设置文件打开状态标志 oldflag=fcntl(fd,F_GETFL); 获得打开文件的状态标志. arg=oldflag|O_APPEND; fcntl(fd,F_S ...
- python语法基础-函数-迭代器和生成器-长期维护
############### 迭代器 ############## """ 迭代器 这是一个新的知识点 我们学习过的可以迭代的对象有哪些? list str ...
- UVALive 3835:Highway(贪心 Grade D)
VJ题目链接 题意:平面上有n个点,在x轴上放一些点,使得平面上所有点都能找到某个x轴上的点,使得他们的距离小于d.求最少放几个点. 思路:以点为中心作半径为d的圆,交x轴为一个线段.问题转换成用最少 ...
- Serializable 接口(序列化)
目录 Serializable 接口(序列化) 前言 用途 如何实现 异常 serialVersionUID transient关键字 Serializable 接口(序列化) 前言 查看API文档时 ...
- Qt QString 与 QByteArray 的转换
QString转换为QByteArray QByteArray byte; QString string; byte = string.toAscii(); QByteArray 转换为 QStrin ...
- crack|erosion|strip|
V-ERG (使)破裂;(使)裂开;(使)断裂 If something hard cracks, or if you crack it, it becomes slightly damaged, w ...
- MYSQL语句中的explain
1.使用mysql explain的原因 在我们程序员的日常写代码中,有时候会发现我们写的sql语句运行的特别慢,导致响应时间特别长,这种情况在高并发的情况下,我们的网站会直接崩溃,为什么双十一的淘宝 ...
- zabbix配置文件详解--服务(server)端、客户(agent)端、代理(proxy)端
在zabbix服务(server)端.客户(agent)端.代理(proxy)端分别对应着一个配置文件,即:zabbix_server.conf,zabbix_agentd.conf,zabbix_p ...
- Vuex安装使用
vuex是以插件的方式存在的. 安装:打开项目的根目录,即package.json所在目录,执行以下命令: npm install vuex --save-dev 背景:小型应用里的每个组件维护着自有 ...