Day972.OAuth 2.0是要通过什么方式解决什么问题? -OAuth 2.0

news2024/11/17 1:54:57

OAuth 2.0是要通过什么方式?解决什么问题?

使用某个App 的时候,是直接使用了第三方帐号(比如微信、微博)登录,还是选择了重新注册新用户?如果选择了重新注册用户,那你还得上传头像、输入用户名等信息。但如果选择了使用第三方帐号微信来登录,那app会直接使用微信的这些信息作为基础信息,就能省心很多。

这是怎么实现的?

微信把我的个人信息给了app,它又是怎么保证我的数据安全的呢?

其实,微信这一系列授权背后的原理都可以归到一个词上,那就是 OAuth 2.0


一、OAuth 2.0 是什么?

用一句话总结来说,OAuth 2.0 就是一种授权协议

那如何理解这里的“授权”呢?
举个咱们生活中的例子。假如是一名销售人员,想去百度拜访你的大客户王总。到了百度的大楼之后,保安拦住了你,问你要工牌。
你说:“保安大哥啊,我是来拜访王总的,哪里有什么工牌”。
保安大哥说:“那你要去前台做个登记”。
然后你赶紧来到前台,前台美女问是不是做了登记。
你说王总秘书昨天有要你的手机号,说是已经做过预约。
小姐姐确认之后往你的手机发了个验证码,把验证码告诉了前台小姐姐之后,她给了一张门禁卡,于是就可以开心地去见王总了。

这个例子里面就有一次授权。本来是没有权限进入百度大楼的,但是经过前台小姐姐一系列的验证之后,她发现确实是来拜访客户的,于是给了你一张临时工牌。这整个过程就是授权


再举一个电商的场景。假如你是一个卖家,在京东商城开了一个店铺,日常运营中要将订单打印出来以便给用户发货。但打印这事儿也挺繁琐的,之前你总是手工操作,后来发现有个叫“小兔”的第三方软件,它可以帮你高效率地处理这事。但想想,小兔是怎么访问到这些订单数据的呢?

其实是这样,京东商城提供了开放平台,小兔通过京东商家开放平台的 API 就能访问到用户的订单数据。只要在软件里点击同意,小兔就可以拿到一个访问令牌,通过访问令牌来获取到你的订单数据帮你干活儿了。

你要是不同意,平台肯定不敢把这些数据给到第三方软件。


二、为什么用 OAuth 2.0?

基于上面两种场景的解决方案,关于授权最容易想到的方案就是提供钥匙

  • 比如,要去百度拜访王总,那前台小姐姐就给你张百度的工牌

  • 小兔要获取你的订单信息,那你就把你的用户名和密码给它。

但稍微有些安全意识,都不会这样做。因为你有了百度工牌,那以后都可以随时自由地进出了,这显然不是百度想要的。所以,百度有一套完整的机制,通过给你一张临时工牌,实现在保证安全的情况下,还能让你去大楼里面见到王总。

相应地,小兔软件请求访问你的订单数据的过程,也会涉及这样一套授权机制,那就是 OAuth 2.0。它通过给小兔软件一个访问令牌,而不是让小兔软件拿着你的用户名和密码,去获取你的订单数据帮你干活儿。其实,除了小兔软件这个场景,在如今的互联网世界里用到 OAuth 2.0 的地方非常多,只是因为它隐藏了实现细节,需要多做分析才能发现它。

比如,当你使用微信登录其他网站或者 App 的时候,当你开始使用某个小程序的时候,都在无感知的情况下用到了 OAuth 2.0。

那总结来说,OAuth 2.0 这种授权协议,就是保证第三方(软件)只有在获得授权之后,才可以进一步访问授权者的数据。

因此,常常还会听到一种说法,OAuth 2.0 是一种安全协议。现在访问授权者的数据主要是通过 Web API,所以凡是要保护这种对外的 API 时,都需要这样授权的方式。而 OAuth 2.0 的这种颁发访问令牌的机制,是再合适不过的方法了。

同时,这样的 Web API 还在持续增加,所以 OAuth 2.0 是目前 Web 上重要的安全手段之一


三、OAuth 2.0 是怎样运转的?

再看看它是怎么运转的。

假如小明在京东上面开了一个店铺,小明要管理他的店铺里面的订单,于是选择了使用小兔软件。

现在,让把“小明”“小兔软件”“京东商家开放平台”放到一个对话里面,看看“他们”是怎么沟通的吧。

小明:“你好,小兔软件。我正在 Google 浏览器上面,需要访问你来帮我处理我在京东商城店铺的订单。”
小兔软件:“好的,小明,我需要你给我授权。现在我把你引导到京东商家开放平台上,你在那里给我授权吧。
”京东商家开放平台:“你好,小明。我收到了小兔软件跳转过来的请求,现在已经准备好了一个授权页面。你登录并确认后,点击授权页面上面的授权按钮即可。”
小明:“好的,京东商家开放平台。我看到了这个授权页面,已经点授权按钮啦😄”
京东商家开放平台:“你好,小兔打单软件。我收到了小明的授权,现在要给你生成一个授权码 code 值,通过浏览器重定向到你的回调 URL 地址上面了。”
小兔软件:“好的,京东商家开放平台。我现在从浏览器上拿到了授权码,现在就用这个授权码来请求你,请给我一个访问令牌 access_token 吧。”
京东商家开放平台:“好的,小兔打单软件,访问令牌已经发送给你了。”
小兔打单软件:“太好了,我现在就可以使用访问令牌来获取小明店铺的订单了。”
小明:“我已经能够看到我的订单了,现在就开始打单操作了。”

下面,一张图来描述整个过程:

在这里插入图片描述

再分析下这个流程,不难发现小兔软件最终的目的,是要获取一个叫做“访问令牌”的东西。

从最后一步也能够看出来,在小兔软件获取到访问令牌之后,才有足够的 “能力” 去请求小明的店铺的订单,也就是才能够帮助小明打印订单。

那么,小兔软件是怎么获取访问令牌的值的呢?
会发现还有一个叫做“授权码”的东西,也就是说小兔软件是拿授权码换取的访问令牌。


小兔软件又是怎么拿到授权码的呢?

从图中流程刚开始的那一步,就会发现,是在小明授权之后,才产生的授权码,上面流程中后续的一切动作,实际上都是在小明对小兔软件授权发生以后才产生的。其中主要的动作,就是生成授权码–> 生成访问令牌–> 使用访问令牌

OAuth 2.0 授权的核心就是颁发访问令牌、使用访问令牌,而且不管是哪种类型的授权流程都是这样。它是整个流程的核心。


可以再回想下,去百度拜访王总的例子。如果是百度这套机制的设计者的话,会怎么设计这套授权机制呢。想清楚了这个问题,再去理解令牌、授权码啥的也就简单了。

在小兔软件这个例子中呢,使用的就是授权码许可(Authorization Code)类型。它是 OAuth 2.0 中最经典、最完备、最安全、应用最广泛的许可类型。

除了授权码许可类型外,OAuth 2.0 针对不同的使用场景,还有 3 种基础的许可类型,分别是隐式许可(Implicit)、客户端凭据许可(Client Credentials)、资源拥有者凭据许可(Resource Owner Password Credentials)。相对而言,这 3 种授权许可类型的流程,在流程复杂度和安全性上都有所减弱


四、总结

OAuth 到底是什么,为什么需要它,以及它大概的运行逻辑是怎样的。

总结来说,需要你记住以下这 3 个关键点:

  1. OAuth 2.0 的核心是授权许可,更进一步说就是令牌机制。也就是说,像小兔软件这样的第三方软件只有拿到了京东商家开放平台颁发的访问令牌,也就是得到了授权许可,然后才可以代表用户访问他们的数据。
  2. 互联网中所有的受保护资源,几乎都是以 Web API 的形式来提供访问的,比如极客时间 App 要获取用户的头像、昵称,小兔软件要获取用户的店铺订单,说 OAuth 2.0 与安全相关,是用来保护 Web API 的。另外,第三方软件通过 OAuth 2.0 取得访问权限之后,用户便把这些权限委托给了第三方软件,说 OAuth 2.0 是一种委托协议,也没问题。
  3. 也正因为像小兔这样的第三方软件,每次都是用访问令牌而不是用户名和密码来请求用户的数据,才大大减少了安全风险上的“攻击面”。不然,试想一下,每次都带着用户名和密码来访问数量众多的 Web API ,是不是增加了这个“攻击面”。

因此,OAuth 2.0 的核心,就是颁发访问令牌使用访问令牌

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

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

相关文章

DPDK imissed、ierrors、rx_nombuf

在采用DPDK进行网络抓包时常常会通过rte_eth_stats_get函数获取当前网卡的丢包状态,首先看一下该函数的声明: // 函数声明(dpdk-stable-19.11.3/lib/librte_ethdev/rte_ethdev.h) int rte_eth_stats_get(uint16_t port_id, struct rte_eth_stats *stats…

高级程序员和新手小白程序员区别你是那个等级看解决bug速度

IT入门深似海 ,程序员行业,我觉得是最难做的。加不完的班,熬不完的夜。 和产品经理,扯不清,理还乱的宿命关系 一直都在 新需求-做项目-解决问题-解决bug-新需求 好像一直都是这么一个循环。(哈哈哈)我觉得一个好的程序…

【传染病模型】

传染病模型:原理介绍与应用实战 一、概述 在公共卫生研究中,传染病模型是一种关键的理论工具,用于理解和预测传染病的传播方式。 二、传染病模型原理 2.1 SIR模型 SIR模型是描述感染性传播病病人数量变化最简单的模型之一。其中&#xf…

不要再重复造轮子了,这几款开源工具类库贼好使

在实际项目开发中,从稳定性和效率的角度考虑,重复造轮子是不被提倡的。但是,自己在学习过程中造轮子绝对是对自己百利而无一害的,造轮子是一种特别能够提高自己系统编程能力的手段。 基于 SpringBoot Vue uni-app 实现的全套电商…

小白如何快速入门?

入门 Web 安全、安卓安全、二进制安全、工控安全还是智能硬件安全等等,每个不同的领域要掌握的技能也不同。当然入门 Web 安全相对难度较低,也是很多人的首选。主要还是看自己的兴趣方向吧。 本文就以下几个问题来说明网络安全大致学习过程&#x1f447…

【CSS3系列】第三章 · CSS3新增边框和文本属性

写在前面 Hello大家好, 我是【麟-小白】,一位软件工程专业的学生,喜好计算机知识。希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正&#xff0…

5月总共面试15次,我真哭了....

3年测试经验原来什么都不是,只是给你的简历上画了一笔,一直觉得经验多,无论在哪都能找到满意的工作,但是现实却是给我打了一个大巴掌!事后也不会给糖的那种... 先说一下自己的个人情况,普通二本计算机专业…

【Spring Cloud】Spring Cloud 中 Zuul 网关原理及其配置

文章目录 前言一、Zuul 网关简介二、Zuul 网关使用场景三、Zuul 网关原理3.1 过滤器3.2 生成路由并发送给后端服务3.3 处理路由响应 四、Zuul 网关配置过程步骤1:添加依赖步骤2:创建配置类步骤3:配置路由规则步骤4:添加过滤器 五、…

【C# 10 和 .NET 6】使用MVC模式构建网站(笔记2)

3. 自定义 ASP.NET Core MVC 网站 现在您已经了解了基本 MVC 网站的结构,您将对其进行自定义和扩展。您已经为 Northwind 数据库注册了一个 EF Core 模型,因此下一个任务是在主页上输出一些数据。 3.1 定义自定义样式 主页将显示 Northwind 数据库中77 种…

常见的IO模型

计算机硬件包括CPU,内存,网卡 为了避免用户应用和操作系统内核产生冲突乃至内核崩溃,用户应用和内核是隔离开的 1)进程的寻址空间会被划分成两部分,内核空间和用户空间,内核和用户应用都无法直接访问物理内存&#xff…

【Vue】Vuex,Vue-Router

❤️ Author: 老九 ☕️ 个人博客:老九的CSDN博客 🙏 个人名言:不可控之事 乐观面对 😍 系列专栏: 文章目录 Vuexvue-router Vuex 将公用的数据统一存放在store(全局数据中心)中,实现更方便的跨…

从实习到秋招成为一名安全工程师,我经历了什么

前言 借朋友口述总结了安全招聘面试经历分享,希望更多的人看到这篇文,从中得到启发,找到自己心仪的工作。 基本情况 签了字节的三方,秋招终于告一段落。从八月份边实习边准备秋招到现在,经历了许多,这篇帖…

2023金三银四Java开发岗热门面试题总结

最近很多粉丝朋友私信我说:熬过了去年的寒冬却没熬过现在的内卷;打开 Boss 直拒一排已读不回,回的基本都是外包,薪资还给的不高,对技术水平要求也远超从前;感觉 Java 一个初中级岗位有上千人同时竞争&#…

都说00后已经躺平了,但是有一说一,该卷的还是卷啊。

这不,三月份春招我们公司来了个00后,工作没两年,跳槽到我们公司起薪20K,都快接近我了。 后来才知道人家是个卷王,从早干到晚就差搬张床到工位睡觉了。 最近和他聊了一次天,原来这位小老弟家里条件不太好&…

Java学习路线(21)——网络通信

一、网络通信三件套 1、IP地址: 设备在网络中的地址,唯一标识 概念: Internet Protocal,简称为IP,全称“互联网协议地址”。 常见分类: IPv4(32位) 和 IPv6(128位&#…

IDEA debug断点调试认识与技巧

IDEA debug断点调试认识与技巧 文章目录 IDEA debug断点调试认识与技巧认识debug常见的操作如何开启debug模式 基本用法和快捷键1、显示执行点(Alt F10)2、步过(F8)3、步入(F7)4、强制步入(Alt…

【容器云架构】确定容器网络calico最佳网络选项

大图 了解 Calico 支持的不同网络选项,以便您可以根据需要选择最佳选项。 价值 Calico 灵活的模块化架构支持广泛的部署选项,因此您可以选择适合您特定环境和需求的最佳网络方法。这包括使用各种 CNI 和 IPAM 插件以及底层网络类型以非覆盖或覆盖模式运行…

线性回归模型一二三

文章目录 什么是线性回归线性回归的求解一元线性回归(最小二乘法)多元线性回归 衍生求解梯度下降智能搜索算法求解(PSO)简要分析 线性回归与简单神经网络联系类比推导反向传播 总结 什么是线性回归 线性回归的基本假设是&#xf…

Java JUC并发编程调优

前言 1、JUC是指有关 java.util.concurrent包以及其子包,这些包都是有关线程操作的包 2、HTTPS服务请求中,WEB服务只负责创建主线程来接收外部的HTTPS请求,如果不做任何处理,默认业务逻辑是通过主线程来做的,如果业务…

预训练大语言模型的三种微调技术总结:fine-tuning、parameter-efficient fine-tuning和prompt-tuning

预训练大模型,尤其是大语言模型已经是当前最火热的AI技术。2018年Google发布BERT模型(BERT在DataLearner官方模型卡信息:https://www.datalearner.com/ai-models/pretrained-models/BERT )的时候,大家还没有意识到本轮…