最开始接触 OAuth2.0 的时候 , 经常将它和 SSO单点登录搞混 。后来因为工作需要 , 在项目中实现了一套SSO , 通过对SSO的逐渐了解 , 也把它和OAuth2.0区分开了 。所以当时自己也整理了一篇文章 SSO单点登录三种情况的实现方式详解_迹忆客 有兴趣的小伙伴可以看一下
最近需要经常和各大电商平台进行对接 , 所以又和OAuth2.0重逢了 。因此这里再次对OAuth2.0的原理及实现方式进行一个梳理 , 希望通过这套教程能够帮到大家 。对于技术类的文章 , 这引言是有点过长了 。好了下面我们进入正题 。
什么是 OAuth2.0OAuth 是一种开放的授权协议 , 它是目前最流行的授权机制 。它允许将存储在一个站点上的资源共享到另一个站点 , 而无需使用该站点的凭据 。
这类定义一般都比较抽象 , 要理解起来不是太容易 。所以这里我们通过一个实际应用的类比来说明一下这个场景 , 你会发现 , 其实OAuth2.0的原理并不复杂 。
首先 , 假设我在微信上注册了账号 , 然后加了一些好友 , 并且有一些聊天记录 。
【带你全面了解 OAuth2.0】然后 , 我正在访问一个网站/应用 。这里假设正在访问 www.jiyik.com。这个网站有一项功能是可以获取微信号上的好友和聊天 , 然后对这些信息进行一个统计分析的功能(当然 , 本站是没有这项功能的) 。
个人感觉这项功能不错 , 就想使用它 。有一种方式是我可以把个人的微信账号和密码告诉这个应用 。应用可以通过账号密码获取到好友信息和聊天记录 。但是这样我感觉很不安全 , 如果我以后不想再继续使用了 , 那我还得再去修改账号和密码 。那样就会很麻烦了 。所以这里就需要一种方式可以使得我将一些权限授权给该网站 , 使其可以不用账号和密码就可以获取到这些信息 。这种授权方式就是 OAuth2.0 。当我不再想使用该功能的时候 , 我就可以把权限收回或者使授权失效 。
所以说一个完整的OAuth2.0 的流程需要涉及到三个实体 。
文章插图
OAuth2.0原理示例
- 资源服务商 (微信 , google , Facebook等)
- 第三方网站/应用
- 用户
通过上面的场景 , 我们大概也能清楚OAuth2.0的基本的原理了 。下面我们通过整体介绍一下其架构 , 来更深入的了解其工作原理 。
OAuth2.0 架构
文章插图
OAuth2.0-认证架构
整个的流程是这样的 。
一、 首先 , 用户使用 Google、微信 等第三方应用程序访问资源 。
二、 第三方网站会带着客户端ID和客户端密钥重定向到资源服务的授权登录界面 。
三、 用户会接收到一个Google或微信的授权登录界面 。用户需要在该界面进行授权 。
四、 用户使用身份验证应用程序登录 。客户端 ID 和客户端密钥对于授权服务器上的客户端应用程序是唯一的 。
五、 身份验证服务器使用授权代码将用户重定向到重定向统一资源标识符 (URI) 。这个地址是第三方网站在接入资源服务的认证服务时提交给认证服务的 , 当用户授权成功后 , 会被重定向到该网址 。
六、 用户访问位于客户端应用程序中重定向 URI 的页面 , 该页面此时会带有一个用于验证的Code 。
七、 客户端应用程序将获得身份验证Code、客户端 ID 和客户端密钥 , 并将它们发送到授权服务器 。
八、 身份验证应用程序向客户端应用程序返回访问令牌 。
九、 一旦客户端应用程序获得访问令牌 , 用户开始使用客户端应用程序访问资源所有者的资源 。
整个OAuth2.0的流程就是这样的 。这其中会涉及到一些HTTP的知识点 , 关于HTTP可以参考我们的 HTTP教程 。
OAuth2.0会涉及到很多术语和概念 , 下面我们对这些术语概念进行一些解释 。
推荐阅读
- 东汉自然灾害多于西汉?东汉末年曹操为了解决军粮问题
- 手把手带你编译Spring框架源码,让你的学习事半功倍
- 了解和解释虚拟机上的 CPU Steal Time
- 买猫需要了解什么?新手买猫一定要注意这几点
- 贡菊和金丝皇菊哪个功效好,金丝皇菊什么样的好金丝皇菊和胎菊哪个好你了解吗
- 老玩家|原神 | 老玩家也不一定了解的几个游戏小知识(第二期)!
- 吃了金银忍冬的果实怎么办,想了解蓝叶忍冬
- 电脑回收站清空了怎么恢复回来?这个方法你了解吗
- Python正则表达式保姆式教学,带你精通大名鼎鼎的正则
- 用什么算法可以快速检索数据?Bitmap了解一下