OAuth 2.0是目前最流行的授权机制,用来授权第三方应用,获取用户数据。

这个标准比较抽象,使用了很多术语,初学者不容易理解。其实说起来并不复杂,下面我就通过一个简单的类比,帮助大家轻松理解,OAuth 2.0 到底是什么。

一、快递员问题

我住在一个大型的居民小区。

小区有门禁系统。

进入的时候需要输入密码。

我经常网购和外卖,每天都有快递员来送货。我必须找到一个办法,让快递员通过门禁系统,进入小区。

如果我把自己的密码,告诉快递员,他就拥有了与我同样的权限,这样好像不太合适。万一我想取消他进入小区的权力,也很麻烦,我自己的密码也得跟着改了,还得通知其他的快递员。

有没有一种办法,让快递员能够自由进入小区,又不必知道小区居民的密码,而且他的唯一权限就是送货,其他需要密码的场合,他都没有权限?

二、授权机制的设计

于是,我设计了一套授权机制。

第一步,门禁系统的密码输入器下面,增加一个按钮,叫做"获取授权"。快递员需要首先按这个按钮,去申请授权。

第二步,他按下按钮以后,屋主(也就是我)的手机就会跳出对话框:有人正在要求授权。系统还会显示该快递员的姓名、工号和所属的快递公司。

我确认请求属实,就点击按钮,告诉门禁系统,我同意给予他进入小区的授权。

第三步,门禁系统得到我的确认以后,向快递员显示一个进入小区的令牌(access token)。令牌就是类似密码的一串数字,只在短期内(比如七天)有效。

第四步,快递员向门禁系统输入令牌,进入小区。

有人可能会问,为什么不是远程为快递员开门,而要为他单独生成一个令牌?这是因为快递员可能每天都会来送货,第二天他还可以复用这个令牌。另外,有的小区有多重门禁,快递员可以使用同一个令牌通过它们。

三、互联网场景

我们把上面的例子搬到互联网,就是 OAuth 的设计了。

首先,居民小区就是储存用户数据的网络服务。比如,微信储存了我的好友信息,获取这些信息,就必须经过微信的"门禁系统"。

其次,快递员(或者说快递公司)就是第三方应用,想要穿过门禁系统,进入小区。

最后,我就是用户本人,同意授权第三方应用进入小区,获取我的数据。

简单说,OAuth 就是一种授权机制。数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用。

四、令牌与密码

令牌(token)与密码(password)的作用是一样的,都可以进入系统,但是有三点差异。

(1)令牌是短期的,到期会自动失效,用户自己无法修改。密码一般长期有效,用户不修改,就不会发生变化。

(2)令牌可以被数据所有者撤销,会立即失效。以上例而言,屋主可以随时取消快递员的令牌。密码一般不允许被他人撤销。

(3)令牌有权限范围(scope),比如只能进小区的二号门。对于网络服务来说,只读令牌就比读写令牌更安全。密码一般是完整权限。

上面这些设计,保证了令牌既可以让第三方应用获得权限,同时又随时可控,不会危及系统安全。这就是 OAuth 2.0 的优点。

注意,只要知道了令牌,就能进入系统。系统一般不会再次确认身份,所以令牌必须保密,泄漏令牌与泄漏密码的后果是一样的。 这也是为什么令牌的有效期,一般都设置得很短的原因。

OAuth 2.0 对于如何颁发令牌的细节,规定得非常详细。具体来说,一共分成四种授权类型(authorization grant),即四种颁发令牌的方式,适用于不同的互联网场景。下一篇文章,我就来介绍这四种类型,并给出代码实例。

注:此文章转载于阮老师的个人博客原文链接

看完阮一峰老师的博客后,感觉 OAuth2.0认证就这?相关推荐

  1. 加密算法之阮一峰大神博客摘抄

    http://www.ruanyifeng.com/blog/2006/12/notes_on_cryptography.html 1. 加密方法可以分为两大类.一类是单钥加密(private key ...

  2. 阮一峰老师博客爬取与博客文章存储持久化方式的思考

    阮一峰老师博客爬取与博客文章存储持久化方式的思考 前言 博客文章存储持久化思考 文本形式存储 html形式存储 pdf形式存储 博客爬取思路 爬取思路一 爬取思路二 个人选择 pdf存储 结尾 前言 ...

  3. 解决阮一峰老师博客广告拦截器问题

    在浏览器阮一峰老师博客时,存在广告拦截器,无法显示页面.如下: 这个问题是浏览器的adb广告拦截器插件导致的,只需要把该页面从adb插件中移除就可以. 具体操作为点击右上角插件按钮,取消该页面即可 关 ...

  4. 阮老师的博客被人攻击了。

    这几天在每天上班日常打开电脑,打开阮老师的技术博客的时候,突然发现,博客无法访问了.阮老师的ES6的网站也进不去,当时以为是网络原因并没有在意,今天看到他们说阮老师的博客被黑客攻击了.阮老师也发了两条 ...

  5. 新东方尹圆圆老师的博客上找来的

    这些网站是从新东方尹圆圆老师的博客上找来的,希望大家好好利用: 1. http://www.texun.cn/addrso/index.htm 特训网:English Learning Website ...

  6. 廖雪峰python3爬虫教程_Scrapy爬虫框架入门教程(1)——爬取廖雪峰老师的博客...

    最近一直在学习scrapy,但是网上关于scrapy的教程实在是太少,能找到的教程大多都是基于py2.7/scrapy0.2以下,甚至很多教程都是互相抄袭,连代码都抄漏了好多,更别提各种缩进错误.变量 ...

  7. 从团购网的漏洞看网站安全性问题 -- 安全 -- IT技术博客大学习 -- 共学习 共进步!...

    从团购网的漏洞看网站安全性问题 -- 安全 -- IT技术博客大学习 -- 共学习 共进步!: "" (Via.) 转载于:https://www.cnblogs.com/devo ...

  8. 读王通老师的博客文章和36氪“AI相面”的感想和娱乐

    读王通老师的博客文章和36氪"AI相面"的感想和娱乐 读王通老师的文章了解到"AI相面",觉得好玩,试了试 根据人的面相好坏来研究成功学,发现长的好看的确实比长 ...

  9. 为什么你写博客时感觉很困难?

    沉默王二@了之作品[格物致知.修身齐家] 为什么写博客时感觉很困难?因为准备功夫没做到家呗. 咱们这里说的准备功夫,不是指在打开电脑准备写博客时上百度搜几张图片.到今日头条看看时事热点.到微信订阅号上 ...

最新文章

  1. referenced from 异常
  2. oracle11g dataguard完全手册3-failover active dataguard(完)
  3. ML_Logistic_Regression
  4. 半个月两次投资,百度健康再扩服务版图
  5. 算数运算加法_为什么计算机能“算数”
  6. Dll入口函数参数详解
  7. iOS nav加角标
  8. 找出数组中只出现一次的数
  9. 深入理解Python对象(源码深度解析)
  10. (可远程)开源手机app控制c51单片机,附微信小程序控制
  11. idea打包java项目
  12. Ant-deign-vue入门:布局-官方文档踩坑
  13. 【C语言】计算日期差
  14. Vim 为什么把 HJKL 当作光标键?
  15. 如何在 MySQL / MariaDB 中导入导出数据,导入导出数据库文件、Excel、CSV
  16. 超详细python下简单快速下载opencv
  17. 江在川上曰:云服务器上的flask项目部署(Ubuntu+Flask+Gunicorn+Supervisor+Nginx+Anaconda)
  18. 为什么别人总是把你往“坏处想”?浅谈如何更好地与项目团队中的“网友”更好地交流
  19. 记一次小米MIUI优化未启用,导致页面没有正常显示的坑
  20. 我所参加的最贵的培训

热门文章

  1. 金融保险产品介绍PPT模板
  2. 三 java的基本数据类型_JAVA基础(三)--JAVA基本数据类型
  3. Arm急了?高通爆料ARM架构SoC将不允许外部GPU等设计,三星联发科等芯片厂商“被连坐”...
  4. 鹅厂员工告诉你面试互联网公司要不要穿正装
  5. 存能电气机架式UPS助力高速公路监控、收费系统
  6. [Leetcode]5920. 分配给商店的最多商品的最小值
  7. miniUI实现tab切换时显示隐藏菜单栏
  8. SAP学习之配置——BOM状态
  9. pdf去水印的方法介绍
  10. 意大利FBA海运主要港口有哪些