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都 ...
随机推荐
- Spring Boot中@Async的作用
在Spring中,@Async这个注解用于标记的异步的方法.方法上一旦标记了这个方法,当其它线程调用这个方法时,就会开启一个新的线程去异步处理业务逻辑. 此注解的使用说明: 1.此注解可以用在方法上, ...
- ExecutorCompletionService理解记忆
java.util.concurrent 类 ExecutorCompletionService<V> java.lang.Object 继承者 java.util.concurren ...
- OpenCV 特征描述
#include <stdio.h> #include <iostream> #include "opencv2/core/core.hpp" #inclu ...
- 为什么前两年大热的VR创业突然冷了?
不得不说,如果不是<头号玩家>在国内的热映,人们似乎都要忘记VR这个行业了.<头号玩家>中那些带有极强真实色彩的游戏,其实就是VR进化的目标,甚至是巅峰!而里面的角色佩戴的设备 ...
- win10安装inventor失败,怎么强力卸载删除注册表并重新安装
一些搞设计的朋友在win10系统下安装inventor失败或提示已安装,也有时候想重新安装inventor的时候会出现本电脑windows系统已安装inventor,你要是不留意直接安装invento ...
- Inventor 卸载工具,完美彻底卸载清除干净Inventor各种残留注册表和文件
一些同学安装Inventor出错了,也有时候想重新安装Inventor的时候会出现这种本电脑windows系统已安装Inventor,你要是不留意直接安装,只会安装Inventor的附件,Invent ...
- c/c++ main 函数命令行参数的使用
C程序最大的特点就是所有的程序都是用函数来装配的.main()称之为主函数,是所有程 序运行的入口.其余函数分为有参或无参两种,均由main()函数或其它一般函数调用,若调用的是有参函数,则参数在调用 ...
- mysql中事务的并发问题与隔离级别
回归一下事务的四大特性ACID 1.原子性(Atomicity) 事务开始后所有操作,要么全部做完,要么全部不做.事务是一个不可分割的整体.事务在执行过程中出错,会回滚到事务开始之前的状态,以此来保证 ...
- Zabbix-3.0.3实现微信(WeChat)报警
转自:http://blog.sina.com.cn/s/blog_87113ac20102w7hp.html Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是越来 ...
- 统一管理jar包版本
<!-- 统一管理jar包版本 --> <properties> <spring.version>5.0.2.RELEASE</spring.version& ...