转自大佬的一篇博客,写的很好:http://www.ruanyifeng.com/blog/2019/04/oauth_design.html

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),即四种颁发令牌的方式,适用于不同的互联网场景。

什么是OAuth 2.0相关推荐

  1. OAuth 2.0攻击面与案例总结

    本文整理了OAuth 2.0的攻击面+实际案例+辅助测试代码. OAuth流程 本文以两种广泛使用的方案为标准展开..如对流程不了解,请先移步学习: 理解OAuth 2.0 Authorization ...

  2. 简述 OAuth 2.0 的运作流程

    本文将以用户使用 github 登录网站留言为例,简述 OAuth 2.0 的运作流程. 假如我有一个网站,你是我网站上的访客,看了文章想留言表示「朕已阅」,留言时发现有这个网站的帐号才能够留言,此时 ...

  3. 背水一战 Windows 10 (83) - 用户和账号: 数据账号的添加和管理, OAuth 2.0 验证

    原文:背水一战 Windows 10 (83) - 用户和账号: 数据账号的添加和管理, OAuth 2.0 验证 [源码下载] 背水一战 Windows 10 (83) - 用户和账号: 数据账号的 ...

  4. 谈谈基于OAuth 2.0的第三方认证 [上篇]

    对于目前大部分Web应用来说,用户认证基本上都由应用自身来完成.具体来说,Web应用利用自身存储的用户凭证(基本上是用户名/密码)与用户提供的凭证进行比较进而确认其真实身份.但是这种由Web应用全权负 ...

  5. oauth2_带有Spring Security的OAuth 2.0快速指南

    oauth2 "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验 ...

  6. OAuth 2.0中的scope和RBAC中的role有什么关系

    使用了OAuth2.0授权协议之后我们在API的访问控制时又多了一个scope的概念.它和角色访问控制的作用类似,有点让人有点模糊不清.今天我们来理清楚这两个概念. scope scope是 OAut ...

  7. 别再搞错!OAuth 2.0只是授权协议,OIDC才是认证授权协议

    上一文我们对Keycloak保护Spring Boot应用进行了实操.让大家见识到了Keycloak的强大.为了掌握Keycloak就必须对OpenID Connect(OIDC)协议进行了解. OI ...

  8. ASP.NET WebApi OWIN 实现 OAuth 2.0

    OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. OAuth 允许用户提供一个令牌, ...

  9. IdentityServer4 实现 OAuth 2.0(密码模式 - HTTP Post 方式)

    之前写了一篇文章:<IdentityServer4 实现 OpenID Connect 和 OAuth 2.0> 上面这篇文章虽然详细,但都是点到为止的介绍,并没有实际应用的示例,所以,后 ...

  10. Spring Boot OAuth 2.0 客户端

    在上一篇<OAuth 2.0 授权码请求>中我们已经可以获取到access_token了,本节将使用客户端来访问远程资源 配置资源服务器 授权服务器负责生成并发放访问令牌(access_t ...

最新文章

  1. 外贸常用术语_外贸英文用语,为邮件增光添彩
  2. Linux安装telnet
  3. 关于Domain-Specific Languages
  4. Core-java面试题第一套上篇
  5. 一篇文章为你深度解析HTTPS 协议
  6. qt中继承pushbutton自定义控件设置按钮样式
  7. linux rc.local权限,Linux开机启动rc.local不执行分析
  8. IReport无法打开的原因
  9. Magcodes.WeiChat——自定义CustomCreationConverter之实现微信自定义菜单的序列化
  10. 收集 关于IDEA 开发工具的一些有用的设置 或 使用技巧
  11. Rust: codewars的Simple Substitution Cipher Helper算法题、N种不简单的解法集
  12. Python 断言的使用
  13. 两个重要极限定理推导
  14. 并行计算:循环程序并行化的一般方法
  15. 超好玩的css3-3d效果
  16. 【U8+】用友U8+16.1不自动删除历史的自动备份文件
  17. 计算机伦理学理论分析三大思想,试论伦理学的三种理论形态——基于理论形态学的考察...
  18. VS2019+OpenCV4.5 鱼眼相机图像畸变矫正
  19. 【数据结构】开端序幕
  20. Impala中的invalidate metadata 和refrsh

热门文章

  1. hdu 1142 最短路 + DP
  2. Windows环境下安装redis以及出现的一些未解决的问题
  3. Python学习笔记之if语句(三)
  4. 01-Eureka是什么?
  5. AOP 详解 、AOP 中通知类型 、AOP 两种实现方式(Schema-base 和 AspectJ)
  6. Drools创建Maven工程
  7. Java正则之Unicode属性匹配的那些事
  8. GET和POST史上最全总结
  9. java分页插件PageHelper的内置list数据操作失败
  10. php get获取cookie值,golang web开发获取get、post、cookie参数