【OAuth】快速入门

一、引言

1、什么是OAuth2.0?

        OAuth 2.0是一个关于授权的开放网络协议,允许用户授权第三方应用访问其在服务提供商上存储的资源(如照片、视频、联系人列表),而无需将用户名和密码提供给第三方应用。OAuth 2.0在第三方应用与服务提供商之间设置了一个授权层,将用户与客户端区分开来,使得第三方应用不能直接登录服务提供商,只能登录授权层。服务提供商根据令牌的权限范围和有效期,向第三方应用开放用户资源。

        与OAuth 1.0相比,OAuth 2.0不向后兼容,且更加关注客户端开发者的简易性。同时,OAuth 2.0为Web应用、桌面应用、手机和起居室设备提供了专门的认证流程。在认证和授权的过程中涉及的三方包括:服务提供方(用户使用服务提供方来存储受保护的资源,如照片、视频、联系人列表)、用户(存放在服务提供方的受保护的资源的拥有者)和客户端(即第三方应用)。

2、为什么要使用OAuth2.0,原因?

  1. 用户不再需要注册大量账号。在以前,每使用一个新的网站或者APP都需要注册一个账号,建立一套新的账户体系才能使用网站或APP提供的服务。而OAuth2.0简化了这个过程,用户只需要授权给第三方应用,就可以让第三方应用访问特定的资源。
  2. OAuth2.0可以实现单点登录。如果一个公司有很多个需要用户登录才能提供服务的子产品(比如:官网、APP、微信公众号等),这种情况下为每个产品都开发一个登录、授权模块显然是不太优雅。使用OAuth2.0可以让所有需要登录的产品都请求同一个登录授权中心,进行统一登录授权处理。
  3. OAuth2.0可以用于分布式系统的权限控制。因为基于OAuth2.0协议获得的令牌(Access Token)同时关联了接入的第三方应用、授权用户、权限范围等信息。因此,在第三方应用拿着Token请求资源的时候,资源服务应用就可以很容易根据其访问权限返回相应的数据。
  4. OAuth 2.0关注客户端开发者的简易性。它为Web应用、桌面应用和手机,以及智能家居设备提供专门的认证流程。

3、作用

OAuth 2.0协议的主要作用是授权,它允许用户授权第三方应用访问其在服务提供商上存储的资源(如照片、视频、联系人列表),而无需将用户名和密码提供给第三方应用。这个协议关注客户端开发者的简易性,为Web应用、桌面应用和手机,以及智能家居设备提供专门的认证流程。

在OAuth 2.0中,用户通过客户端向服务提供方请求一个临时令牌,该令牌授权第三方应用在特定的时段内访问特定的资源。用户只需授权一次,就可以让第三方应用访问其存储在服务提供者上的信息,而不需要每次都分享他们的访问许可或他们数据的所有内容。

对于第三方应用来说,无需存储用户相关账号密码等信息;对于用户访问来说,省去注册用户等繁琐步骤。因此,OAuth 2.0广泛应用于一些知名网站(如QQ、微信、微博等)授权第三方应用(比如:自己搭建的应用),以获取知名网站用户的个人信息,如昵称、性别、头像等。

二、协议流程

1、应用场景

  1. 第三方联合登录:例如QQ、微信等提供的联合登录功能,用户只需在第三方应用中授权,就可以直接登录并访问自己的账户信息。
  2. 开放接口:许多大型互联网公司(如蚂蚁金服、腾讯等)会开放自己的API接口,让第三方开发者可以接入并使用他们的服务。OAuth 2.0可以用于授权第三方应用访问这些开放接口,从而获取或操作资源。
  3. 应用与网站之间的数据共享:例如,一个用户可以在多个设备上使用同一账号登录某个应用或网站,OAuth 2.0可以帮助实现数据的同步和共享。
  4. 单点登录:在需要多个账号登录的应用或网站中,OAuth 2.0可以帮助用户使用同一账号登录所有应用或网站,实现单点登录。
  5. 设备授权:例如智能家居设备,用户可以通过OAuth 2.0授权第三方应用控制自己的智能家居设备。

🐉步骤解读

  1. 在网站上面点击第三方授权,重定向到第三方授权服务页面等待获取授权码;
  2. 在手机上扫描二维码进行授权,将重定向到客户端应用提供的URL。

  3. 客户端使用上一步获取的授权码,向官方授权服务器申请令牌(Token);

  4. 官方授权服务器对客户端进行认证以后,确认无误,同意发放令牌;

  5. 客户端使用令牌向资源服务器(微信)申请获取资源;

  6. 资源服务器(微信)确认令牌无误后,同意向客户端开放资源;

2、角色

  1. Third-party application:第三方应用程序,又称"客户端"(client),即例子中的"Gitee"。

  2. HTTP service:HTTP服务提供商,简称"服务提供商",即例子中的微信。

  3. Resource Owner:资源所有者,又称"用户",也就是你(user)。

  4. User Agent:用户代理,比如浏览器。

  5. Authorization server:授权服务器,即服务提供商专门用来处理认证授权的服务器。

  6. Resource server:资源服务器,即服务提供商存放用户生成的资源的服务器。它与授权服务器,可以是同一台服务器,也可以是不同的服务器。

OAuth的作用就是让"客户端"安全可控地获取"用户"的授权,与"服务提供商"进行交互。

主要角色

  • 资源拥有者(Resource Owner):通常是用户,拥有并授权访问其个人资源。
  • 客户端(Client):负责发起资源请求的应用或服务,比如第三方应用。
  • 资源服务(Resource Server):存储并处理用户资源的服务器。
  • 认证服务器(Authorization Server):负责处理用户的授权请求,颁发访问令牌。

3、认证流程

  1. 客户端向用户请求授权,并出示自己的身份。
  2. 用户在客户端的网页上输入用户名和密码,然后授权该客户端访问所请求的资源。
  3. 授权成功后,服务提供方引导用户返回客户端的网页。
  4. 客户端根据临时令牌从服务提供方那里获取访问令牌。
  5. 服务提供方根据临时令牌和用户的授权情况授予客户端访问令牌。
  6. 客户端使用获取的访问令牌访问存放在服务提供方上的受保护的资源。

(A)用户打开客户端以后,客户端要求用户给予授权。

(B)用户同意给予客户端授权。

(C)客户端使用上一步获得的授权,向认证服务器申请令牌。

(D)认证服务器对客户端进行认证以后,确认无误,同意发放令牌。

(E)客户端使用令牌,向资源服务器申请获取资源。

(F)资源服务器确认令牌无误,同意向客户端开放资源。

🐂令牌的特点

  • 令牌又时效性,一般是短期的,且不能修改,密码一般是长期有效的

  • 令牌可以由颁发者撤销,且即时生效,密码一般可以不用修改而长期有效

  • 令牌可以设定权限的范围,且使用者无法修改

在使用令牌时需要保证令牌的保密,令牌验证有效即可进入系统,不会再做其他的验证。

三、OAuth2.0授权模式

  1. 授权码模式(Authorization Code):这是最常用且安全级别最高的授权模式。在授权码模式下,客户端首先通过用户在授权服务器上获取授权码(Authorization Code)。然后,客户端使用这个授权码向授权服务器换取访问令牌。
  2. 隐式模式(Implicit):这种模式适用于纯前端应用,没有后端服务。客户端直接请求授权服务器获得访问令牌,并将其存储在前端应用中以供以后使用。
  3. 密码模式(Resource Owner Password Credentials):在这种模式下,客户端直接从用户那里获取用户名和密码,然后使用这些凭据直接向授权服务器请求访问令牌。
  4. 客户端凭证模式(Client Credentials):在这种模式下,客户端提供自己的凭证(通常是一些证书或者API密钥)来获取访问令牌。这种模式通常用于机器对机器的通信,例如,一个服务器向另一个服务器请求访问某个资源。

1、授权码模式(Authorization Code)

        授权码模式是最常用且安全级别最高的授权模式。在这种模式下,客户端首先通过用户在授权服务器上获取授权码。然后,客户端使用这个授权码向授权服务器换取访问令牌。具体流程包括用户访问页面时,重定向到认证服务器,认证服务器给用户一个认证页面,等待用户授权,用户在认证页面上做出决定,认证服务器接收用户的决定并返回授权码给客户端,客户端在后台向授权服务器请求令牌,并使用授权码换取访问令牌。

2、隐式模式(Implicit)

        隐式授权模式适用于纯前端应用,没有后端服务。在这种模式下,客户端直接请求授权服务器获得访问令牌,并将其存储在前端应用中以供以后使用。由于访问令牌是在客户端的浏览器中存储的,因此存在一定的安全风险。

3、密码模式(Resource Owner Password Credentials)

        在这种模式下,客户端直接从用户那里获取用户名和密码,然后使用这些凭据直接向授权服务器请求访问令牌。这种模式的优点是简单易用,但存在安全风险,因为用户密码可能会被泄露。

4、客户端凭证模式(Client Credentials)

        在这种模式下,客户端提供自己的凭证(通常是一些证书或者API密钥)来获取访问令牌。这种模式通常用于机器对机器的通信,例如,一个服务器向另一个服务器请求访问某个资源。这种模式的优点是可以减少对用户的依赖,但需要确保客户端凭证的安全性。

流程总结

  1. 客户端向资源所有者请求授权。授权请求可以直接向资源所有者发起,或者通过作为中介的授权服务器间接发起。
  2. 客户端收到授权许可,这是一个代表资源所有者的授权的凭据,使用本规范中定义的四种许可类型之一或者使用扩展许可类型表示。
  3. 客户端与授权服务器进行身份认证并出示授权许可请求访问令牌。
  4. 授权服务器验证客户端身份并验证授权许可,若有效则颁发访问令牌。
  5. 客户端从资源服务器请求受保护资源并出示访问令牌进行身份验证。
  6. 资源服务器验证访问令牌,若有效则满足该请求。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

该酷的酷该飒的飒,穿出自己的潮流前线

精选匈牙利白鸭绒填充,柔软蓬松 舒适感很强,回弹性好 没有什么异味很干净安全 宝贝穿上去保暖又舒适 树脂拉链+金属按扣,松紧帽檐+袖口 下摆还做了可调节抽绳,细节满满防风保暖很nice 短款设计相较于…

分享 | 软件测试的基本流程是什么?软件测试流程详细介绍

软件测试 软件测试和软件开发一样,是一个比较复杂的工作过程,如果无章法可循,随意进行测试势必会造成测试工作的混乱。为了使测试工作标准化、规范化,并且快速、高效、高质量地完成测试工作,需要制订完整且具体的测试…

12.21~12.24最短路,dij,堆优化dij,spfa

有条件的最短路径一定长于无条件的最短路径 朴素dij dij的思路就是先入起点,然后从起点开始向四周遍历,每次确定一个实际最短的,,这里注意,正是因为没有负权,所以越早遇到的最短,就一定是最短…

智能变电站协议系列-2、SV/SMV协议示例(IEC61850)以及5G专网下的电力方案分析

文章目录 一、前言二、资料准备三、libiec61850的SV运行示例及抓包分析1、单独编译示例程序2、运行示例程序及5G专网场景下部署3、wireshark抓包分析 四、最后 一、前言 之前我们对IEC61850协议有了整体的了解,对一些概念有了一定的认识,并针对GOOSE协议…

JWT、session、token区别和实现

JWT、session、token区别和实现 这里需要用到Redis和JWT。 springboot版本是3.2.1 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency><…

【MySQL】mysql执行查询超过30秒之后报错

出现场景&#xff1a; 用workbench&#xff0c;查本地数据库&#xff0c;执行查询超过30秒之后&#xff0c;会报错断开连接&#xff0c;报错信息&#xff1a;Error Code: 2013. Lost connection to MySQL server during query 解决办法&#xff1a; 修改配置设置&#xff0c…

数据可视化分析大屏,大数据统计UI页面源文件(信息分析平台免费PS资料)

数据可视化可以帮助数据分析者更好地理解数据&#xff0c;发现数据中的规律和趋势。通过图表和图形等可视化工具&#xff0c;数据分析者可以更快速地发现数据中的关系&#xff0c;比如相关性、趋势、异常值等。对于普通用户来说&#xff0c;理解复杂的数据可能会很困难。通过数…

【开源】基于JAVA语言的学校热点新闻推送系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 新闻类型模块2.2 新闻档案模块2.3 新闻留言模块2.4 新闻评论模块2.5 新闻收藏模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 新闻类型表3.2.2 新闻表3.2.3 新闻留言表3.2.4 新闻评论表3.2.5 新闻收藏表 四、系统展…

Anylogic Pro 8.8.x for Mac / for Linux Crack

Digital twins – a step towards a digital enterprise AnyLogic是唯一一个支持创建模拟模型的方法的模拟建模工具&#xff1a;面向过程&#xff08;离散事件&#xff09;、系统动态和代理&#xff0c;以及它们的任何组合。AnyLogic提供的建模语言的独特性、灵活性和强大性使…

上传文件到七牛云的相关代码(可直接用)

首先在七牛云注册&#xff0c;然后选择对象存储&#xff0c;按照以下配置&#xff1a; 我的存储地区是华南-广东&#xff0c;注意这个如果选择不一样&#xff0c;后面的代码调用会有一点区别&#xff0c;访问控制选择公开&#xff0c;不然回显的外链无法访问。 记住这个空间名称…

HarmonyOS构建第一个ArkTS应用(Stage模型)

构建第一个ArkTS应用&#xff08;Stage模型&#xff09; 创建ArkTS工程 若首次打开DevEco Studio&#xff0c;请点击Create Project创建工程。如果已经打开了一个工程&#xff0c;请在菜单栏选择File > New > Create Project来创建一个新工程。 选择Application应用开发…

深入了解 Android 中的应用程序签名

深入了解 Android 中的应用程序签名 一、应用程序签名介绍1.1 应用程序签名1.2 应用程序签名的意义1.3 应用程序签名的流程1.4 应用程序签名的方案1.5 签名的重要性和应用场景 二、AOSP 的应用签名2.1 AOSP的应用签名文件路径2.2 应用程序指定签名文件 三、Android Studio 的应…

10:IIC通信

1&#xff1a;IIC通信 I2C总线&#xff08;Inter IC BUS&#xff09; 是由Philips公司开发的一种通用数据总线&#xff0c;应用广泛&#xff0c;下面是一些指标参数&#xff1a; 两根通信线&#xff1a;SCL&#xff08;Serial Clock&#xff0c;串行时钟线&#xff09;、SDA&a…

物联网协议之COAP简介及Java实践

目录 前言 一、COAP简介 1、关于COAP 2、COAP特点 3、基于COAP的NB-IoT接入流程 二、CoAP协议JAVA实践 1、californium介绍 2、Java集成 3、Maven 资源引入 4、定义Server端 5、Client调用 6、运行测试 总结 前言 今天平安夜&#xff0c;祝大家圣诞快乐&#xff0c…

41 sysfs 文件系统

前言 在 linux 中常见的文件系统 有很多, 如下 基于磁盘的文件系统, ext2, ext3, ext4, xfs, btrfs, jfs, ntfs 内存文件系统, procfs, sysfs, tmpfs, squashfs, debugfs 闪存文件系统, ubifs, jffs2, yaffs 文件系统这一套体系在 linux 有一层 vfs 抽象, 用户程序不用…

前端---html 的介绍

1. 网页效果图 --CSDN 2. html的定义 HTML 的全称为&#xff1a;HyperText Mark-up Language, 指的是超文本标记语言。 标记&#xff1a;就是标签, <标签名称> </标签名称>, 比如: <html></html>、<h1></h1> 等&#xff0c;标签大多数都是…

一篇文章拿捏继承多态练习题

继承多态习题 选择题解释 简答题 选择题 下面哪种面向对象的方法可以让你变得富有( ) A: 继承 B: 封装 C: 多态 D: 抽象 ( )是面向对象程序设计语言中的一种机制。这种机制实现了方法的定义与具体的对象无关&#xff0c; 而对方法的调用则可以关联于具体的对象。 A: 继承 B: 模…

Linux系统编程(六):进程(下)

参考引用 UNIX 环境高级编程 (第3版)嵌入式Linux C应用编程-正点原子 1. 进程与程序 1.1 main() 函数由谁调用&#xff1f; C 语言程序总是从 main 函数开始执行int main(void) int main(int argc, char *argv[]) // 如果需要向应用程序传参&#xff0c;则选择该种写法操作系…

TikTok真题第3天 | 856.括号的分数、2115. 从给定原材料中找到所有可以做出的菜、394.字符串解码

856.括号的分数 题目链接&#xff1a;856.score-of-parentheses 解法&#xff1a; leetcode官方的题解基本是每个字都认得&#xff0c;连起来就看不懂。 使用栈来解决&#xff0c;后进先出&#xff0c;后面加入的左括号&#xff0c;先弹出和右括号去匹配。定义一个记录分数…

部署LNMP动态网站

部署LNMP动态网站 安装LNMP平台相关软件1. 安装软件包2. 启动服务&#xff08;nginx、mariadb、php-fpm&#xff09;3. 修改Nginx配置文件&#xff0c;实现动静分离4. 配置数据库 上线wordpress代码 &#xff08;测试搭建的LNMP环境是否可以使用&#xff09;1. 上线php动态网站…