您当前的位置:首页 > 电脑百科 > 电脑知识

带你全面了解 OAuth2.0

时间:2021-09-16 11:41:47  来源:  作者:迹忆客

最开始接触 OAuth2.0 的时候,经常将它和 SSO单点登录搞混。后来因为工作需要,在项目中实现了一套SSO,通过对SSO的逐渐了解,也把它和OAuth2.0区分开了。所以当时自己也整理了一篇文章 SSO单点登录三种情况的实现方式详解_迹忆客 有兴趣的小伙伴可以看一下

最近需要经常和各大电商平台进行对接,所以又和OAuth2.0重逢了。因此这里再次对OAuth2.0的原理及实现方式进行一个梳理,希望通过这套教程能够帮到大家。对于技术类的文章,这引言是有点过长了。好了下面我们进入正题。

什么是 OAuth2.0

OAuth 是一种开放的授权协议,它是目前最流行的授权机制。它允许将存储在一个站点上的资源共享到另一个站点,而无需使用该站点的凭据。

这类定义一般都比较抽象,要理解起来不是太容易。所以这里我们通过一个实际应用的类比来说明一下这个场景,你会发现,其实OAuth2.0的原理并不复杂。

首先,假设我在微信上注册了账号,然后加了一些好友,并且有一些聊天记录。

然后,我正在访问一个网站/应用。这里假设正在访问 www.jiyik.com 。这个网站有一项功能是可以获取微信号上的好友和聊天,然后对这些信息进行一个统计分析的功能(当然,本站是没有这项功能的)。

个人感觉这项功能不错,就想使用它。有一种方式是我可以把个人的微信账号和密码告诉这个应用。应用可以通过账号密码获取到好友信息和聊天记录。但是这样我感觉很不安全,如果我以后不想再继续使用了,那我还得再去修改账号和密码。那样就会很麻烦了。所以这里就需要一种方式可以使得我将一些权限授权给该网站,使其可以不用账号和密码就可以获取到这些信息。 这种授权方式就是 OAuth2.0。当我不再想使用该功能的时候,我就可以把权限收回或者使授权失效。

所以说一个完整的OAuth2.0 的流程需要涉及到三个实体。

带你全面了解 OAuth2.0

OAuth2.0原理示例

  • 资源服务商 (微信,google,Facebook等)
  • 第三方网站/应用
  • 用户

当有另一个第三方的网站要使用微信账号登录其系统时,同样我们也可以通过授权的方式登录这个第三方的网站。这样就实现了同一个微信账号可以多个不同的网站进行登录。这也是一种单点登录,这也是为什么最初经常会将其和SSO单点登录搞混的原因。

通过上面的场景,我们大概也能清楚OAuth2.0的基本的原理了。下面我们通过整体介绍一下其架构,来更深入的了解其工作原理。

OAuth2.0 架构

带你全面了解 OAuth2.0

OAuth2.0-认证架构

整个的流程是这样的。

一、 首先,用户使用 Google、微信 等第三方应用程序访问资源。

二、 第三方网站会带着客户端ID和客户端密钥重定向到资源服务的授权登录界面。

三、 用户会接收到一个Google或微信的授权登录界面。用户需要在该界面进行授权。

四、 用户使用身份验证应用程序登录。客户端 ID 和客户端密钥对于授权服务器上的客户端应用程序是唯一的。

五、 身份验证服务器使用授权代码将用户重定向到重定向统一资源标识符 (URI)。这个地址是第三方网站在接入资源服务的认证服务时提交给认证服务的,当用户授权成功后,会被重定向到该网址。

六、 用户访问位于客户端应用程序中重定向 URI 的页面,该页面此时会带有一个用于验证的Code。

七、 客户端应用程序将获得身份验证Code、客户端 ID 和客户端密钥,并将它们发送到授权服务器。

八、 身份验证应用程序向客户端应用程序返回访问令牌。

九、 一旦客户端应用程序获得访问令牌,用户开始使用客户端应用程序访问资源所有者的资源。

整个OAuth2.0的流程就是这样的。这其中会涉及到一些HTTP的知识点,关于HTTP可以参考我们的 HTTP教程。

OAuth2.0会涉及到很多术语和概念,下面我们对这些术语概念进行一些解释。

术语

验证

身份验证是识别一个用户的过程,通常是基于用户个人的用户名和密码。通过用户名和密码来验证该用户是否是一个合法的资源持有者。

联合身份验证

许多第三方网站/应用都有自己的用户名和密码。某些应用程序依赖于其他服务来验证用户的身份。联合身份管理系统提供对多个系统的单一访问。这称为联合身份验证。

授权

授权是允许某人做某事的过程。它需要有效用户的身份来检查该用户是否被授权。

委托授权

委托授权是将自己的凭据提供给其他用户以代表该用户执行某些操作的过程。

角色

OAuth 定义了以下角色

带你全面了解 OAuth2.0

OAuth2.0 角色

  • 资源所有者 - 资源所有者被定义为能够授予访问其在资源服务器上托管的自己数据的能力的实体。当资源所有者是个人时,称为最终用户。
  • 客户端应用程序 - 客户端是一个应用程序,它发出受保护的资源请求以代表资源所有者执行操作。
  • 资源服务器 - 资源服务器是可用于访问用户信息的 API 服务器。
  • 认证服务器 - 认证服务器从资源所有者那里获得许可并将访问令牌分发给客户端,以访问由资源服务器托管的受保护资源。

Web 服务器

Web 服务器是一个计算机系统,它使用 HTTP协议 将网页传送给用户。只要应用程序想要访问资源服务器,客户端ID和密钥就存储在web应用程序服务器上。将客户端ID和密钥存储在 Web 应用程序服务器上的目的是保密。

带你全面了解 OAuth2.0

客户端 Web 应用程序服务器

在上图中,资源所有者允许机密客户端访问托管在资源服务器上的数据,其中客户端 ID 和密钥保存在服务器上并且是保密的。

客户端 ID 和密钥对于授权服务器上的客户端应用程序是唯一的。

资源服务器是一个服务器,它承载着 Google、微信等资源。这些资源存储在资源服务器上,供客户端应用程序访问,资源所有者拥有这些资源。

然后,授权服务器使用客户端 Web 应用程序访问资源所有者的资源。


用户代理

用户代理应用程序由用户设备中的客户端应用程序使用,它可以是一个脚本语言,例如在浏览器中运行的 JAVAScript。所以说我们可以将用户代理应用程序存储在 Web 服务器上。

下图显示了客户端用户代理应用程序的架构。

带你全面了解 OAuth2.0

OAuth2.0 客户端用户代理应用程序的架构

一、 首先,用户使用 Google、微信 等身份验证应用程序访问资源所有者的资源。

二、 接下来,用户应用程序提供客户端 ID 和客户端密钥,从而登录到授权服务器。

三、 然后,用户代理应用程序提供一个在浏览器中运行的 JavaScript 应用程序实例并链接到 Web 服务器。

四、 授权服务器允许使用客户端凭据从资源服务器访问资源。

五、 资源服务器包含由资源所有者拥有的资源。


本机应用程序

本机应用程序可以用作桌面或手机应用程序的实例,它使用资源所有者凭据。它是安装在资源所有者设备上的客户端应用程序。

应用程序使用的身份验证凭据包含在应用程序代码中。因此,不要使用在外部用户代理中运行的本机应用程序。

带你全面了解 OAuth2.0

OAuth2.0 客户端本机应用程序的架构

一、 首先,用户使用 Google、微信 等身份验证应用程序访问资源所有者的资源。

二、 接下来,本机应用程序使用客户端 ID 和客户端密钥登录到授权服务器。本机应用程序是桌面或手机应用程序的实例,它安装在用户计算机上,并将客户端密钥存储在计算机或设备上。

三、 授权服务器允许使用客户端凭据从资源服务器访问资源。

四、 资源服务器包含由资源所有者拥有的资源。

总结

以上我们介绍了OAuth2.0 的整体流程,以及这中间涉及到的一些术语和概念我们分别进行了介绍。这要求我们对HTTP协议的原理要稍微有些了解。通过上面的介绍其实我们可以看到,整个过程较为核心的部分就是对 访问令牌的获取。可以查看OAuth2.0 - 颁发访问令牌的几种方式 来了解如何获取访问令牌。



Tags:OAuth2.0   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
最开始接触 OAuth2.0 的时候,经常将它和 SSO单点登录搞混。后来因为工作需要,在项目中实现了一套SSO,通过对SSO的逐渐了解,也把它和OAuth2.0区分开了。所以当时自己也整理了一篇...【详细内容】
2021-09-16  Tags: OAuth2.0  点击:(68)  评论:(0)  加入收藏
介绍OAuth(开放授权)是一个开放标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方应用或分享他们数据的所有内容。OAuth...【详细内容】
2020-08-18  Tags: OAuth2.0  点击:(65)  评论:(0)  加入收藏
从事互联网开发的同学们应该或多或少听说过 OAuth2.0 协议,例如使用微信或支付宝账户登录第三方App,这是 OAuth2.0 最为开发人员所熟知的一个用途,但是围绕着 OAuth2.0 协议其...【详细内容】
2020-07-12  Tags: OAuth2.0  点击:(102)  评论:(0)  加入收藏
一、什么是OAuth协议OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 OAuth的授权不会使第三方触及到用户的帐号信息(如用户...【详细内容】
2019-08-01  Tags: OAuth2.0  点击:(269)  评论:(0)  加入收藏
▌简易百科推荐
回答这个问题前首先要了解一度电的定义一度电= 1000W·h ,是一个能量单位,一个功率为1000w的设备持续运作一小时就会消耗1度电。所以台式机多少时间一度电完全取决于台...【详细内容】
2021-12-20  数码榜    Tags:台式电脑   点击:(5)  评论:(0)  加入收藏
你是不是很多时候都会紧急冲向电源插座以拯救笔记本电脑的电量?很多时候由于附近没有方便的插座,一是会误事,二是会导致尴尬。幸运的是,现代笔记本电脑比前辈高效得多。如今,即...【详细内容】
2021-12-16  趣玩公社    Tags:电池   点击:(17)  评论:(0)  加入收藏
电脑在我们生活中的重要性不言而喻。如何保证自己的电脑流畅好用,对于很多用户来说都非常重要。作为一个理科男和IT从业者,对于自己的电脑还是非常在意的,会定期的进行整理,保持...【详细内容】
2021-12-09  小伊评科技    Tags:电脑   点击:(13)  评论:(0)  加入收藏
大家好,我是良许。不管我们使用什么操作系统,无论是 Windows、macOS 还是 Linux ,里面都安装了许多软件、驱动程序和固件。但是,这三者概念有区别呢?我在朋友圈做了个小调查,发现...【详细内容】
2021-11-30  良许Linux    Tags:固件   点击:(10)  评论:(0)  加入收藏
澎湃问吧世界著名密码史学家戴维·卡恩曾说:“人类使用密码的历史几乎与使用文字的时间一样长”,这意味着人类密码领域的较量已近五千年。提及“密码”一词,大多数人会想...【详细内容】
2021-11-24    澎湃新闻  Tags:密码   点击:(16)  评论:(0)  加入收藏
由于去中心化域名和账户体系可以承载应用、网站和用户身份,因此有理由相信,这是 Web3 世界中不可或缺的一环。撰文:潘致雄如果回忆一下初次进行的加密货币转账时的体验,特别是在...【详细内容】
2021-11-03  链闻ChainNews    Tags:ENS   点击:(26)  评论:(0)  加入收藏
 文件系统(File System)是计算机系统必不可少的组成部分,可以说除了部分结构简单的单片机系统之外,文件系统是支撑每一个计算机系统运行的最重要的支撑,无论是操作系统、应用程...【详细内容】
2021-11-01  欧工玩转嵌入式  CSDN  Tags:FAT32   点击:(30)  评论:(0)  加入收藏
SDS 2.0时代进化达尔文的《进化论》认为,地球上现存的所有生物都是自然选择的结果,生物只有适应环境的变化,才能得到生存和进化。回望到企业存储,一个常做常新的行业,从上古结绳...【详细内容】
2021-10-28  ExponTech   企鹅号  Tags:SDS   点击:(35)  评论:(0)  加入收藏
在昨天的微信《远程办公危机四伏,到底该pick谁给你保驾护航?》中介绍了远程员工应该具备的四大安全工具,今天继续分享干货:05 双因子令牌在理想的情况下,每个人都会对所有的关键...【详细内容】
2021-10-26    计算机世界  Tags:远程办公   点击:(32)  评论:(0)  加入收藏
今天几乎所有的数字显示设备都基于某种类型的 RGB(红、绿、蓝)颜色模型。RGB 是表示人类可以看到的大多数颜色的最有效方式(有一些颜色不能很好地产生,但这是另一个讨论)。相机...【详细内容】
2021-10-09  懒懒散散的程序员    Tags:RGB   点击:(49)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条