本文来简单说下OAuth 2.0授权协议

文章目录

  • 概述
  • 快递员问题
  • 授权机制的设计
  • 互联网场景
  • 令牌与密码
  • 本文小结

概述

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

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


快递员问题

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

小区有门禁系统。

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


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

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

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


授权机制的设计

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

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

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

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

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

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

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


互联网场景

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

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

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

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

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


令牌与密码

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

  • 令牌是短期的,到期会自动失效,用户自己无法修改。密码一般长期有效,用户不修改,就不会发生变化。
  • 令牌可以被数据所有者撤销,会立即失效。以上例而言,屋主可以随时取消快递员的令牌。密码一般不允许被他人撤销。
  • 令牌有权限范围(scope),比如只能进小区的二号门。对于网络服务来说,只读令牌就比读写令牌更安全。密码一般是完整权限。

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

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

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


本文小结

本文使用一个生活中的例子形象的解释了OAuth2.0授权协议

OAuth2.0授权协议的一个简单解释相关推荐

  1. OAuth2.0授权协议与客户端授权码模式详解

    本文来重点讲解下OAuth2.0授权协议与客户端授权码模式 文章目录 什么是OAuth协议 交互过程 客户端授权模式 授权码模式 简化模式 密码模式 客户端模式 接入公司内部系统 后台管理系统 前台业 ...

  2. oauth2.0授权协议中刷新令牌refresh token的工作原理及生命周期分析

    在学习oauth2.0协议的时候,对于刷新令牌refresh token感觉很困惑.主要是为啥需要刷新令牌,以及刷新令牌是如何工作的,技术细节是啥?比如通过refresh token可以让access ...

  3. Java微信公众平台开发(十六)--微信网页授权(OAuth2.0授权)获取用户基本信息

    转自:http://www.cuiyongzhi.com/post/78.html 好长时间没有写文章了,主要是最近的工作和生活上的事情比较多而且繁琐,其实到现在我依然还是感觉有些迷茫,最后还是决定静 ...

  4. 新浪微博Oauth2.0授权认证及SDK、API的使用(Android)

    ---------------------------------------------------------------------------------------------- [版权申明 ...

  5. Oauth2.0 授权认证

    Oauth2.0 授权认证 目录 1. OAuth协议是什么?. 1 2. 应用场景... 1 3. 名词定义... 2 4. 主要流程... 2 5. 四种授权模式... 3 6. 授权码授权方式. ...

  6. 新浪微博 OAuth2.0 授权认证

    微博开放接口的调用,如发微博.关注等,都是需要获取用户身份认证的.目前微博开放平台用户身份鉴权主要采用的是OAuth2.0.另外,为了方便开发者开发.测试自己的应用,我们还提供了Basic Auth的 ...

  7. 详解OAuth 2.0授权协议(Bearer token)

    OAuth 2.0授权协议 1 认证(Authentication) 2 授权(Authorization) 3 OAuth 2.0与认证机制的联系 4 详解OAuth 2.0授权协议 4.1 授权码 ...

  8. 微信企业号OAuth2.0授权-Java

    为什么80%的码农都做不了架构师?>>>    我也是醉了,中午做个饭这么难吃!连自己都看不下去了!怀着沉重的心情把微信企业号OAuth2.0授权看了看,感觉与公众号差别没什么,相信 ...

  9. java 32位授权码_Java实现OAuth2.0授权码方式

    Java实现OAuth2.0授权码方式 前面介绍了OAuth2.0和授权方式,可以参考以下文章: 今天就用Java来验证OAuth2.0授权方式的授权码式,我们Spring Cloud的OAuth来实 ...

最新文章

  1. mybatis mysql方言_MyBatis 方言支持 - Mysql to 华为高斯数据库(gaussdb)
  2. 委托(一个主窗体统计多个从窗体的按钮单击的次数)
  3. 计算机默认存储格式,office2007默认保存文件格式的修改方法
  4. [转]php初级教程(七)一个新闻管理系统(准备工作)
  5. 互联网协议入门(二)
  6. 在ASP.NET中怎么用SESSION判断用户是否登录
  7. boost::core模块实现范围枚举C++11
  8. 骚操作!用Python自动下载抖音美丽小姐姐(有对象的同学小心尝试!)
  9. smb(ms17-010)远程命令执行之msf
  10. python中字典的键必须是可以哈希的对象
  11. canvas绘制图像image
  12. cx是什么简称_80年的5角,在纸币收藏界简称为8005
  13. Oracle数据库安装时 environment variable path 大于 1023
  14. 过滤Filtering
  15. 【文摘】《创新者》-沃尔特·艾萨克森
  16. ftp服务器的端口20和21的具体作用,ftp端口号20和21的区别
  17. 利用Photoshop制作毛玻璃效果
  18. VS 调试时,不允许修改代码
  19. 封装和继承作业(java)(一)
  20. MPX + Vant Weapp 在微信小程序中实现Picker选择器

热门文章

  1. where常用运算符
  2. Eclipse 中,web项目在Tomcat运行时填写不了Server name
  3. ios8 地图不能定位问题的解决办法
  4. redis-py说明文件(转)
  5. LINQ to XML 编程基础
  6. RsyncServer服务无法启动的解决方法
  7. 解决无法使用locate命令的方法
  8. 关于H5跳转到小程序和android的方法
  9. 【C语言期末实训】学生学籍管理系统
  10. OpenStack快速入门-queens版本