OAuth2.0最简向导(多图预警)

OAuth 2.0 是目前最流行的授权机制,用来授权第三方应用,获取用户数据。 这个标准比较抽象,使用了很多术语,初学者不容易理解。本文从最小数据单元开始一步一步揭开OAuth 2.0的神秘面纱,希望大家看完本文都能知道OAuth 2.0到底是什么?

首先,得有一些用户的数据。
file

然后,我们需要一个服务器来管理这些用户的数据,我们称之为<font color="orange">“资源服务器”</font>
file

这时候有个第三方应用想要访问用户的数据,我们把这第三方应用称之为<font color="orange">“客户应用”</font>
file

这时候我们给资源服务器按个门暴露用户数据,这个门我们称之为<font color="orange">“API”</font>
file

客户应用可以通过API访问用户的数据,资源服务器负责返回用户数据。
file

这时候来了个恶意的客户应用,它也想要获取用户数据拿去获利。由于我们没给API加上权限校验,所以恶意的客户应用也可以获取用户数据。
file

我们迫切需要一种机制来<font color="orange">保护用户数据</font>,业界实践是提前给客户应用颁发一个<font color="orange">Access Token</font>,它表示客户应用被授权可以访问用户数据。
file

客户应用请求资源服务器获取用户数据时,在请求里带上Access Token 参数,资源服务器取出请求中的Access Token并校验Access Token确认客户应用有访问用户数据的权限 。
file

校验通过后资源服务器返回用户数据
file

由于该机制工作的前提是:<font color="orange">必须提前给客户应用颁发Access Token</font>,所以这时候我们又需要一个<font color="red">颁发Access Token的角色</font>,我们把这个负责颁发Access Token的角色称之为<font color="orange">授权服务器</font>。
file

暂停一下,我们来看看黑板

  • 授权服务器负责生成Access Token, 并将Access Token 颁发给客户应用
  • 客户应用带上Access Token 去访问用户数据
  • 资源服务器负责从请求里取出AccessToken,校验Access Token是否具有访问用户的权限,如果有则返回客户数据。

客户应用、授权服务器、资源服务器之间的关系如下
file

上面流程中第一步是授权服务器生成Access Token ,在真实流程中,在颁发Token给客户应用之前需要先征询用户的同意,必须要用户同意授权才会给客户应用颁发Access Token。
客户应用、授权服务、用户三者之间的交互流程如下:

  1. 客户应用请求授权服务器获取Access Token
  2. 授权服务器咨询用户意见
  3. 用户同意授权
  4. 授权服务器颁发Access Token 给 客户应用

file

OAuth 2.0标准化了Access Token的请求和响应部分,OAuth2.0的细节在RFC 6749(OAuth 2.0授权框架)中描述。参考网站
file

欢迎扫码关注微信公众号或 个人博客
Image placeholder
K_Leroy
未设置
  41人点赞

没有讨论,发表一下自己的看法吧

推荐文章
GitHub回应突然断供:身在美国不由己,无权提前通知预警

乾明发自凹非寺 转自量子位 |公众号QbitAI“GitHub受美国贸易法的约束,就像任何在美国开展业务的公司一样。”这是GitHubCEONatFriedman对GitHub限制伊朗等地账户给出的回

Go 语言实战向导

实现初衷 简单可依赖,充分利用go已有的东西,不另外增加复杂、难以理解的东西,这样做的好处包括:更容易跟随go的升级而升级,降低使用者学习成本 yii提供的controller/action的路由方式

springboot 多数据源,最简单的整合方式

简介 相信大家有配置过多数据源,或者即将配置多数据的朋友们,会发现网上大概有以下几种方案: 1.使用AOP切片进行动态数据源切换 2.使用MapperScan的basePackages配置不同的map

Go语言高级编程_2.1.1 最简CGO程序

2.1快速入门 本节我们将通过一系列由浅入深的小例子来快速掌握CGO的基本用法。 2.1.1最简CGO程序 真实的CGO程序一般都比较复杂。不过我们可以由浅入深,一个最简的CGO程序该是什么样的呢?要

基于JS的高性能Flutter动态化框架MXFlutter

导语:18年10月份,手机QQ看点团队尝试使用Flutter,做为iOS开发,一接触到Flutter就马上感受到,Flutter虽然强大,但不能像RN一样动态化是阻碍我们使用她的唯一障碍了。看Goog

如何使用 Python 和 BeautifulSoup 爬取网站

互联网上的信息如此之多,任何人穷其一生也无法全部消化吸收。你需要的不是访问这些信息,而是一种可伸缩的方式,可以用来收集、组织和分析这些信息。你需要的是Web爬取。Web爬取可以自动提取数据,并以一种

REST framework JWT Auth

JWT认证的REST框架 概述 这个包提供对DjangoRESTframework的JSONWebToken认证支持。 需要满足条件 Python(2.7,3.3,3.4,3.5) Django(1.

【翻译】REST framework JWT Auth

JWT认证的REST框架原文链接概述这个包提供对DjangoRESTframework的JSONWebToken认证支持。需要满足条件Python(2.7,3.3,3.4,3.5) Django(1.

Python 教程-了解Python

什么是Python Python能干什么? 有什么特点? 什么是Python 官方介绍: Python是一个易于学习、功能强大的编程语言。它拥有高效高级的数据结构和一种简单有效的面向对象编程的

Python 教程-Python 安装

在Windows上安装 访问https://www.python.org/downloads/并下载最新版本。在撰写时当前最新是3.8。在安装的时候和其他软件一样,无脑式下一步。需要注意的是如果在W

Python入门教程_2. 使用 Python 解释器

2.1.调用解释器 Python解释器通常安装在目标机器上的/usr/local/bin/python3.7目录下;把/usr/local/bin目录放进你的Unixshell的搜索路径里,确保它可以

Python入门教程_3. Python 简介

在下面的例子中,输入和输出分别由大于号和句号提示符(>>>和...)标注:如果想重现这些例子,就要在解释器的提示符后,输入(提示符后面的)那些不包含提示符的代码行。需要注意的是在练习中遇到的从属提示符

Python入门教程_4. 深入 Python 流程控制

除了刚刚介绍的while语句,Python还有一些在其他语言中常见的控制流语句,并做了一些改动。 4.1.if语句 也许最著名的语句是if语句了。 例如: >>>x=int(input("Please

ThinkPHP5-使用 think-API 部署 JWT

因为下一个项目要用TP5开发一个小程序,所以就使用到了,TP框架,因为小程序开发需要后台来编写api接口,所以就上网查了一下有没有相关的依赖,在此推荐一下think-api扩展工具,因为主要想使用其中

集成 think-ORM 的 symfony bundle thinkorm-bundle

thinkorm-bundleSymfonyThinkOrmBundle关于thinkorm-bundle允许在你symfony使用thinkorm.所安装$composerrequireccwwwo

超8千Star,火遍Github的Python反直觉案例集!

大数据文摘授权转载作者:SatwikKansal译者:暮晨Python,是一个设计优美的解释型高级语言,它提供了很多能让程序员感到舒适的功能特性。但有的时候,Python的一些输出结果对于初学者来说似

面向回家编程!GitHub标星两万的”Python抢票教程”,我们先帮你跑了一遍

盼望着,盼望着,春节的脚步近了,然而,每年到这个时候,最难的,莫过于一张回家的火车票。据悉,今年春运期间,全国铁路发送旅客人次同比将增长8.0%。达到4.4亿人次,2020年铁路春运自1月10日开始,

jQuery中this和$(this)的区别是什么?

jQuery中this和$(this)的区别是什么?●$(this)相当于jQuery(this),是一个jQuery对象,只能使用jQuery的属性和方法;●this中存放的是DOM元素,属于jav

jquery this与$(this)的区别是什么?

$(this)相当于jQuery(this),是一个jQuery对象,只能使用jQuery的属性和方法;而this中存放的是DOM元素,属于javascirpt中的DOM元素对象,要使用DOM元素对象

【python测试开发栈】帮你总结python random模块高频使用方法

随机数据在平时写python脚本时会经常被用到,比如随机生成0和1来控制逻辑、或者从列表中随机选择一个元素(其实抽奖程序也类似,就是从公司所有人中随机选择中奖用户)等等。这篇文章,就帮大家整理在pyt

流畅的Python读书笔记 --- 第一章 Python数据模型

近期开始读“流畅的Python”这本书,想把自己的读书笔记分享给大家,希望能帮到也对这本书感兴趣但是没时间看的各位。(文章中大部分的话和图片摘录总结自“流畅的Python”一书,以及python官方网

【python测试开发栈】帮你总结python time模块高频使用方法

在平时写python脚本时,时间是我们经常用到的数据,比如:时间戳、前端展示的对应格式的时间等,在python中主要有三个和时间处理相关的模块:time、datetime、calendar,这篇文章主

GitHub上十大很火的Python项目,最后一个竟然是它!

课程推荐:Python开发工程师--学习猿地--送9个上线商业项目 作为程序开发人员,GitHub是大家平时必逛的网站,GitHub作为目前全球比较大的男性同性交友平台,上面存在着太多太多的宝藏程序。

【Python 1-5】Python教程之——字符串

课程推荐:Python开发工程师--学习猿地--送9个上线商业项目 字符串字符串就是一系列字符。在Python中,用引号括起的都是字符串,其中的引号可以是单引号,也可以是双引号,如下所示:"Thisi

漫谈:Java和Python现在都挺火,我应该怎么选?Java和Python优缺点比较。

课程推荐:Java开发工程师--学习猿地精品课程课程推荐:Python开发工程师--学习猿地精品课程 声明:这是一篇容易引起撕逼的文章,为了祖国和谐,人民安康,请各位看官尽量理性讨论。同时,这篇文章是