身份认证系统(四)OAuth2运行流程
上一节介绍过什么是OAuth2,这节准备用生动的事例来告诉大家OAuth2运行的流程。
我们来想这样一个场景:假设我们有一个叫做万方网盘的服务是用来帮助用户存储论文文档的,我们向外提供了符合OAuth2标准的APi,可以让第三方程序获取到用户的论文。有一个第三方的程序可以调用我们平台的接口获取用户论文,来帮助用户投稿。
在OAuth中,我们管用户叫做资源拥有者(Resource Owner,RO),投稿应用叫做Client,万方网盘叫做资源服务(Resource Server,RS),昨天我们还提到的一个发放令牌的角色叫做授权服务(Authorization Server,AS)。
以下是OAuth2的基本运行流程:
0、Resource Owner向Cilent发出某个请求,这个请求需要调用Resource Owner的用户资源。
1、Client为了能够拿到用户的资源,就要先获取用户的授权。
2、client拿着用户授权向Authorization Server请求访问令牌(Access Token)
3、然后client再拿着访问令牌去向Resource Server获取用户资源
这就是一个完整的OAuth流程,放一张官方的图给大家看:
其实当第一次完成A到D的四个步骤之后,client再要去请求资源的时候,就直接拿着Access Token去请求就可以了,不需要每次都进行A到D四个步骤。因此,我们发现在这个过程中Access Token会经常的被传输,越是经常被网络传输的信息就越容易泄漏,因此Access Token的有效时间就要设置的短一些。但是如果因为Access Token的有效期短,导致了频繁向用户请求授权,这是一件用户体验很差的事情,为了解决这个问题,OAuth2引入了Refresh Token。
当Client得到用户授权之后,向授权服务器获取授权的时候,授权服务器不止会给Client一个Access Token还会给一个Refresh Token用以换取新的Access Token。当Client请求资源服务器之后,发现原本合法的Access Token失效之后(步骤E到F),会用Refresh Token向授权服务器再请求一个新的Access Token,授权服务器会将新的Access Token和新的Refresh Token发送给Client(步骤G到H)。由于有了Refresh Token,Client在向授权服务器请求Access Token的时候就可以不需要再次向用户请求授权了。同样的,因为Refresh Token很少用于传输,所以它是安全的。
最新文章
- Torch7学习笔记(一)CmdLine
- 20151013 C# 第一篇 流程控制语句
- 【CSS】使用边框和背景
- 【BZOJ】2086: [Poi2010]Blocks
- Spring的辅助类
- UVa OJ 194 - Triangle (三角形)
- opencv矩阵总结
- Lex+YACC详解
- HDU 5753 Permutation Bo (推导 or 打表找规律)
- dxxzc团队及队员学号后三位
- Git与GitHub学习笔记(八)git如何同时同步提交到码云和GitHub上
- 在vue中调用echarts中的地图散点图~
- 关于String类学习的一些笔记(本文参考来自程序员考拉的文章)
- 轻量应用服务器安装 phpMyAdmin
- Linux线程 之 线程 线程组 进程 轻量级进程(LWP) -systemtap -mysql
- JS中document对象详解
- Service Mesh扫盲
- python day25 正则表达式
- Catalan数的通项公式(母函数推导)
- 3 使用selenium模拟登录csdn
热门文章
- 原生js中stopPropagation,preventDefault,return false的区别
- Spring中使用构造函数实现Beans自动装配
- kvm虚拟化学习笔记(三)之windows kvm虚拟机安装
- Windows7系统下优化固态硬盘
- VB6 如何添加自定义函数 模块 把代码放到一个模块中
- 分享一个检测用户是否用手机(Mobile)访问网站的 PHP 类
- web.xml文件中各个配置的说明
- 2016/05/10 thinkphp 3.2.2 ①系统常量信息 ②跨控制器调用 ③连接数据库配置及Model数据模型层 ④数据查询
- 内存转储文件 Memory.dmp
- Latex 2: 解决WinEdt和TexWorks用久之后忽然不能正反向搜索