带你全面了解 OAuth2.0

news2024/11/16 17:36:37

最开始接触 OAuth2.0 的时候,经常将它和 SSO单点登录搞混。后来因为工作需要,在项目中实现了一套SSO,通过对SSO的逐渐了解,也把它和OAuth2.0区分开了。所以当时自己也整理了一篇文章《SSO单点登录原理及实现方式》

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

什么是 OAuth2.0

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

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

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

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

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

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

在这里插入图片描述

  1. 资源服务商 (微信,Google,Facebook等)

  2. 第三方网站/应用

  3. 用户

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

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

OAuth2.0 架构

在这里插入图片描述

整个的流程是这样的。

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

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

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

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

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

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

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

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

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

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

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

术语

1. 验证

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

2. 联合身份验证

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

3. 授权

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

4. 委托授权

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

5. 角色

OAuth 定义了以下角色

图片

  1. 资源所有者 - 资源所有者被定义为能够授予访问其在资源服务器上托管的自己数据的能力的实体。当资源所有者是个人时,称为最终用户。

  2. 客户端应用程序 - 客户端是一个应用程序,它发出受保护的资源请求以代表资源所有者执行操作。

  3. 资源服务器 - 资源服务器是可用于访问用户信息的 API 服务器。

  4. 认证服务器 - 认证服务器从资源所有者那里获得许可并将访问令牌分发给客户端,以访问由资源服务器托管的受保护资源。

Web 服务器

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

图片

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

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

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

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

用户代理

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

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

图片

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

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

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

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

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

本机应用程序

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

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

图片

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

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

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

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

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/611303.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32单片机GPS北斗无线防丢定位超出距离报警系统NRF24L01

实践制作DIY- GC0136-GPS北斗无线防丢定位超出距离报警系统 基于STM32单片机设计-GPS北斗无线防丢定位超出距离报警系统 二、功能介绍: 主机:STM32F103CxT6系列最小系统板OLED显示器NRF24L01无线通讯模块GPS北斗双模定位模块蜂鸣器距离加减2个按键1个模…

爬虫的操作

目录 爬虫基本 re/etree/beautifulsoup保存本地/连接数据库 基本 re lxml/etree beautifulsoup 保存到本地 传入数据库 大致分为 爬虫基本 re/etree/beautifulsoup保存本地/连接数据库 基本 爬一个很简单的百度新闻热搜 爬排名 热搜名 和热搜指数 百度热搜 我们直…

Lucid VS 特斯拉电驱系统

Lucid如何用更小的电机赶超特斯拉 Lucid 称其电机设计是小型化的,并且一直自夸其Air电动汽车中轻型且“紧凑“的电机轻便到可以放进登机行李箱中。然而,小型只是一个方面。Lucid的电机每个重只有67磅,能够产生670马力的动力,你没…

JAVA 生成微信小程序码-分享码

JAVA生成小程序码(太阳码) 工具类是获取token使用; appId 小程序appID appSecret 小程序秘钥 小程序中得配置分享项,不然图片是裂开的。 开发>开发管理>开发设置 nginx 配置 location ~ ^/share { #、share 你的访问路径default_type text/html;alias /d…

Dart 3.0 语法新特性 | 模式匹配 Patterns

theme: cyanosis 一、 Patterns 是什么 下面是官方对 Patterns 特性的说明 patterns :\ 从下面的第一句中可以知道,Patterns 是一种语法级的特性,而语法特性是一种语言的根基。 Patterns are a syntactic category in the Dart language, like statement…

10 缓存双写一致性之更新策略探讨

什么是缓存双写一致性 如果redis中有数据:需要和数据库中的值相同如果redis中无数据:数据库中的值要是最新值 缓存按照操作来分,有细分2种 只读缓存读写缓存 同步直写策略:写缓存时也同步写数据库,缓存和数据库中的…

如何移动下载文件夹到另一个盘?

下载文件夹占用了越来越多的C盘可用空间?本教程将教你如何安全易行地将下载文件夹移动到其他驱动器,以便你可以释放更多的C盘空间。 关于下载文件夹 从网站下载程序后它们会被存储在哪里?一般来说,当你从互联…

基于C++实现的智慧农业移动巡检系统设计(附源码)

Overview 项目源码 https://download.csdn.net/download/DeepLearning_/87863659 此项目开始于2023年2月7日,项目内容为一种AGV图形化操作系统,采用ROS2GO开发,开发环境为Ubuntu18.04、ROS melodic、Qt5.9.9,该项目作为23年挑战杯…

js函数this指向

目录 this的绑定规则  绑定一:默认绑定; ​ 绑定二:隐式绑定; ​ 绑定三:显式绑定; 通过call或者apply绑定this对象  绑定四:new绑定; 内置函数的绑定 this绑定规则的…

给电脑重装系统的时间需要多久才能装好

在进行电脑重装系统时,如果遇到系统安装时间过长的情况,可能会引起用户的困惑和不安。本文将介绍一些常见的原因和解决方法,以帮助您理解并应对系统安装时间过长的情况。 ​工具/原料: 系统版本:Windows 10 专业版 品…

《Java并发编程实战》课程笔记(九)

Semaphore:如何快速实现一个限流器? 信号量模型 信号量模型还是很简单的,可以简单概括为:一个计数器,一个等待队列,三个方法。 在信号量模型里,计数器和等待队列对外是透明的,所以…

chatgpt赋能python:Python图片大小设置的SEO指南

Python 图片大小设置的SEO指南 在网站设计和开发中,图片大小通常是一个重要的问题。合适的图片大小可以极大地影响用户体验和搜索引擎优化(SEO)结果。Python是一种广泛使用的编程语言,可以用来控制和设置图片大小。在本文中&…

BUUCTF MD5

密文: e00cf25ad42683b3df678c61f42c6bda 简述: 一般MD5值是32位由数字“0-9”和字母“a-f”所组成的字符串,字母大小写统一;如果出现这个范围以外的字符说明这可能是个错误的md5值,就没必要再拿去解密了。 特征&…

SQL-DDL操作数据库、表

SQL-DDL操作数据库、表 1 DDL:操作数据库 1.1 查询数据库 查询所有的数据库 SHOW DATABASES; show databases;1.2 创建数据库 创建数据库 CREATE DATABASE 数据库名称; create database 数据库名称;创建数据库(判断,如果不存在则创建) CREATE DATABASE IF NOT…

SyntaxError:Unexpected end of JSON input while parsing near xxxxx 报错及解决

环境:Node 12.21.0、npm 6.14.11 (其他版本也会出现这样的问题) 找到报错日志并进行查看: less /Users/roc/.npm/_logs/2023-06-05T02_23_51_747Z-debug.log报错信息如下: 19067 verbose stack SyntaxError: Unexp…

【遇到的问题】JAVA应用程序处于安全原因被阻止。

遇到的问题: 直入正题,远程服务器用JAVA连接KVM报以下错(如图)。 应用程序处于安全原因被阻止 无法验证证书 将不执行该应用程序 名称:Java viewer 发行者:ATEN 位置:https://192.168.210:443 原因: 通过…

vue3实现高德地图多点标注(so easy)

vue3实现高德地图多点标注(so easy) 前言思路清晰,抽丝剥茧必要的准备工作最简单的部分处理数据之前(最关键的思路)效果完整代码 前言 非常感谢你能打开这篇博客,我想你一定是遇到了地图多点标注有关的问题…

采购管理系统对企业有什么作用?原来用零代码搭建如此便捷

什么是采购管理系统? 采购管理系统是一种企业内部管理软件,用于协调和管理企业的采购过程。它涵盖了采购计划、询价、比价、采购订单、采购合同、采购收货、发票等一系列采购环节,以及与供应商的信息和交流。其主要目的是:优化采…

M12圆形连接器公母对接带线3PIN4PIN

随着工业自动化的发展,M12圆形连接器公母对接带线3PIN4PIN作为一种重要的连接器件,被广泛应用于各种工业设备中。本文将详细介绍M12连接器的特点以及应用场景,为大家解答M12连接器的相关问题。 M12连接器主要由连接器头、插座和电缆组成&…

【Web网站服务】Nginx Rewrite重写模块

Nginx Rewrite 一、常用的Nginx 正则表达式二、location 匹配的范围2.1location实验 三、rewrite模块3.1rewrite跳转3.2rewrite执行顺3.3flag标记说明3.4rewrite中常用的全局变量3.5rewrite实验3.5.1 基于域名的跳转3.5.2基于客户端IP访问跳转3.5.3基于旧域名跳转到新域名后面加…