前言技术之OAuth2.0

news2024/12/22 19:27:48

1、什么是OAuth2.0

OAuth2.0是目前使用非常广泛的授权机制,用于授权第三方应用获取用户的数据。 举例说明:

用户可以通过选择其他登录方式来使用gitee,这里就使用到了第三方认证。

OAuth 引入了一个授权层,用来分离两种不同的角色:客户端和资源所有者。......资源所有者同意 以后,资源服务器可以向客户端颁发令牌。客户端通过令牌,去请求数据。

2. OAuth2中的角色

1. 资源所有者 能够授予对受保护资源的访问权限的实体,如果资源的所有者为个人,也被成为最终用户

1. 资源服务器 存储有受保护资源的服务器, 能够接受并验证访问令牌,并响应受保护资源的访问请求

1. 客户 需要被授权,然后再访问受保护资源的实体。客户这个术语,并不是特指应用程序,服务器,计算机 等。

1. 授权服务器 验证资源所有者并获取授权成功后,向客户发出访问令牌

3. 认证流程 

RFC 6749 - The OAuth 2.0 Authorization Framework 

4. 生活中的Oauth2思维

场景设置:小王出差在外,为家中买了一台空调需要上门安装,小王的老爸老王在家,小王家是小王的 老婆做主,只用获得老婆的许可方能有进入家中。现在空调客服人员需要进到小王家中安装空调。设计 的流程如下: 客服人员发一个进门安装空调的的申请给小王 小王看到了服务人员的申请,在验证了客服人员的公司名称,工号等信息后,同意申请,并发给他 一个授权码 客服人员获取授权码之后,使用授权码去申请进门的令牌,申请发到小王的老婆那里,小王老婆在 验证了授权码之后给客服人员发了一个含有有效期为一天的令牌(小王的老婆可以查看到小王发的 原始验证码) 客服人员拿着令牌到小王家 老王在验证令牌有效后可客服人员进入客厅安装空调,但这个令牌不能进入其他房间。 一天后令牌会过期,如有需要则需要重新申请 上面的过程反应了OAuth2认证的典型流程,流程中的角色对应关系 客户 ---> 客服人员 资源所有者 ---> 小王 授权服务器 ---> 小王老婆 资源服务器 ---> 客厅

5. 令牌的特点

使用令牌方式的优点: 令牌又时效性,一般是短期的,且不能修改,密码一般是长期有效的令牌可以由颁发者撤销,且即时生效,密码一般可以不用修改而长期有效 令牌可以设定权限的范围,且使用者无法修改 在使用令牌时需要保证令牌的保密,令牌验证有效即可进入系统,不会再做其他的验证。

 

6. OAuth2授权方式

由于互联网有多种场景,OAuth2定义了四种获取令牌的方式,可以选择合适与自己的方式 授权码(authorization-code) 隐藏式(implicit) 密码式(password): 客户端凭证(client credentials)

6.1 授权码

第三方应用先申请一个授权码,然后再用该码获取令牌。 最常见的用法,安全性高,适合web应用。 授权码通过前端传送,令牌则是储存在后端,而且所有与资 源服务器的通信都在后端完成。这样的前后端分离,可以避免令牌泄漏。 流程如下:

 

1. 资源服务器提供一个链接,用户点击后就会跳转到认证服务器,授权用户数据给资源服务器使用, 资源服务器提供的连接的示例:

https://b.com/oauth/authorize?

  response_type=code&

  client_id=CLIENT_ID&

  redirect_uri=CALLBACK_URL&

  scope=read

response_type=code,表示使用授权码方式

client_id=CLIENT_ID,请求者的身份ID

redirect_uri=CALLBACK_URL, 认证服务器接受请求之后的调转连接,可以根据这个连接将生成 的code发送给资源服务器

scope=read,授权范围为只读

1. 页面跳转后,用户登录认证服务器,同意或拒绝资源服务器的授权请求,认证服务器根据上一步的redirect_uri地址,将生成的授权码返回给资源服务器。

https://resouce.com/callback_url?code=AUTHORIZATION_CODE

 

code 返回的认证码

1. 客户拿到认证码之后,向认证服务器发给请求,申请令牌

https://b.com/oauth/token?

 client_id=CLIENT_ID&

 client_secret=CLIENT_SECRET&

 grant_type=authorization_code&

 code=AUTHORIZATION_CODE&

 redirect_uri=CALLBACK_URL

client_id 资源服务器的身份ID client_secret=CLIENT_SECRET 安全参数,只能在后端发请求

grant_type=authorization_code 表示授权的方式为授权码

code=AUTHORIZATION_CODE 用来获取令牌的授权码

redirect_uri=CALLBACK_URL 令牌生成后的颁发地址

1. 认证服务器对授权码进行认证,通过后颁发令牌,

{    
  "access_token":访问令牌,
  "token_type":"bearer",
  "expires_in":过期时间,
  "refresh_token":"REFRESH_TOKEN",
  "scope":"read",
  "uid":用户ID,
  "info":{...}
}

 

6.2 隐藏方式

隐藏方式合适的场景: 当web应用为纯前端应用没有后端,此时必须将令牌放在前端保存,省略了申请授权码的步骤。

1. 资源服务器提供连接,跳转到认证服务器,

https://b.com/oauth/authorize?

  response_type=token&

  client_id=CLIENT_ID&

  redirect_uri=CALLBACK_URL&

  scope=read

response_type=token 表示直接返回令牌

client_id=CLIENT_ID 客户的身份ID redirect_uri=CALLBACK_URL 生成令牌后的回调地址

scope=read 授权范围,只读

1. 用户需要在认证服务器登录,并进行授权, 授权成功后会根据第一步提供的CALLBACK_URL地址 返回生成的token

https://a.com/callback#token=ACCESS_TOKEN

 这种方式的特点:这种方式不安全,适用于对安全性不高的场景,令牌的有效期一般设置的比较短,通 常是会话期间有效,浏览器关闭令牌就时效了

6.3 密码方式

非常信任某个应用,将用户名和密码直接告诉应用,应用拿到用户名和密码后直接申请令牌

1. 资源服务器要求用户提供认证服务器的用户名和密码,拿到以后资源服务器向认证服务器申请令牌

https://oauth.b.com/token?

  grant_type=password&

  username=USERNAME&

  password=PASSWORD&

  client_id=CLIENT_ID

grant_type=password 认证方式

username=USERNAME 用户名

password=PASSWORD 密码

client_id=CLIENT_ID 客户id 1. 认证服务器验证身份通过后,直接在响应中发放令牌,资源服务器在响应中获取令牌。

6.4 凭证方式

这种方式适用于没有前端的命令行应用,通过命令行的方式请求令牌

1. 资源服务器使用命令行向认证服务器发送请求

https://oauth.b.com/token?

  grant_type=client_credentials&

  client_id=CLIENT_ID&

  client_secret=CLIENT_SECRET

grant_type=client_credentials 凭证方式

client_id=CLIENT_ID 客户身份ID

client_secret=CLIENT_SECRET 认证码

 该方式真对的是第三方应用,而不是用户,可以多个用户共享一个令牌

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

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

相关文章

记录--手把手教学,实现一个优雅的图片预览

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 在我们开发项目中,经常会遇到预览图片的需求。也就是点击图片,会全屏显示该图片。需求很简单,但是如何让实现更优雅就需要花点心思了。 最终效果图 基础版本 实现方…

从 Issue 看 El-Table 源码,给 Element+ 提 Pr 的背后竟如此坎坷

Element Plus大家应该都不陌生,用过 el-table 的伙伴更是多数,毕竟搞ToB业务 table 必不可少,但是真正翻看过源码的应该还是少数,有没有对其内部实现怀揣着一点点好奇呢?笔者就是因为怀揣着好奇,所以才走上…

什么是Intel Elkhart Lake?专用于物联网的处理器系列

随着世界向工业4.0过渡,边缘计算应用程序对实时推理、连接和数据遥测的更高性能和更低功耗处理的需求激增,并加强了加固。物联网和边缘计算的爆炸性增长造成了上一代处理器无法维持的性能瓶颈和限制。英特尔最新推出的Atom x6000 E系列、奔腾和赛扬N&…

IDEA无法使用Git Pull的问题

一、问题描述 我们开发项目时,经常会和第三方接口打交道,有些第三方项目为了安全起见,会把项目部署在"内网"环境,不对外暴露,通常会提供VPN代理才能访问到资源。 而在项目中我就因为这个而遇到了一个问题&am…

RK3568平台开发系列讲解(Linux系统篇)什么是Linux文件

🚀返回专栏总目录 文章目录 一、文件描述符二、常用文件 I/O 操作和函数2.1、open2.2、close2.3、read2.4、write沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 Linux 把大部分系统资源当作文件呈现给用户,用户只需按照文件 I/O 的方式,就能完成数据的输入输出。…

Diffusion 扩散模型(DDPM)详解及torch复现

文章目录torch复现第1步:正向过程噪声调度器Step 2: 反向传播 U-NetStep 3: 损失函数采样Training我公众号文章目录综述:https://wangguisen.blog.csdn.net/article/details/127065903 保姆级讲解 Diffusion 扩散模型(DDPM) ht…

python面向对象:入门

python面向对象:入门 文章目录python面向对象:入门一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤1.创建类和对象2.构造方法3.类中的实例方法一、实验目的 掌握类的基本使用 二、实验原理 面向过程:根据业务逻辑从上到下写…

Win10 BCD文件损坏怎么修复?

在Windows 10操作系统中,BCD代表引导配置数据(Boot Configuration Data),Windows运行时BCD将告诉Windows引导加载程序在哪里查找引导信息, 因此,它对成功地加载和运行操作系统是非常重要的。哪些情况下会导…

二叉树的前序遍历

题目144. 二叉树的前序遍历 - 力扣(LeetCode)本章我们来探讨运用二叉树中所学的知识解决本题。对二叉树仍有疑问的小伙伴可以点击下方链接哦。参考文献:(1条消息) 二叉树(三)_染柒_GRQ的博客-CSDN博客原理首先我们来回…

CyberBattleSim-(内网自动化渗透)研究分析

**01 **背景知识介绍 CyberBattleSim介绍 CyberBattleSim是一款微软365 Defender团队开源的人工智能攻防对抗模拟工具,来源于微软的一个实验性研究项目。该项目专注于对网络攻击入侵后横向移动阶段进行威胁建模,用于研究在模拟抽象企业网络环境中运行的…

基于蜣螂算法优化的核极限学习机(KELM)分类算法-附代码

基于蜣螂算法优化的核极限学习机(KELM)分类算法 文章目录基于蜣螂算法优化的核极限学习机(KELM)分类算法1.KELM理论基础2.分类问题3.基于蜣螂算法优化的KELM4.测试结果5.Matlab代码摘要:本文利用蜣螂算法对核极限学习机(KELM)进行优化,并用于分类1.KELM理…

R语言贝叶斯方法在生态环境领域中的应用

贝叶斯统计已经被广泛应用到物理学、生态学、心理学、计算机、哲学等各个学术领域,其火爆程度已经跨越了学术圈,如促使其自成统计江湖一派的贝叶斯定理在热播美剧《The Big Bang Theory》中都要秀一把。贝叶斯统计学即贝叶斯学派是一门基本思想与传统基于…

STM32CubeMx使用FreeRTOS搭建printf输出串口打印-----基于正点原子开发板阿波罗

文章目录STM32CubeMx使用FreeRTOS搭建printf输出串口打印-----基于正点原子开发板阿波罗1.输入目标芯片2.选择RCC时钟3.配置调试模式4.USART的配置5.配置中断6.printf的重定向功能7.代码添加8.修改中断函数9.添加全局变量10.增加FreeRTOS支持11.在FreeRTOS中添加源码STM32CubeM…

【数学建模】数学建模中的常用工具推荐

前言 整理了几款我在建模比赛中需要准备的小工具,后续会随时不定期更新,以及完善内容,需要的小伙伴建议收藏一波~ [1] 公式编译器 Axmath(建议购买正版)mathtypeWord内置的公式编辑器 Axmath是国产的软件&#xff0…

pytorch安装(模式识别与图像处理课程实验)

pytorch安装(模式识别与图像处理课程实验)1、 打开cmd,创建torch虚拟环境。2、 激活创建的torch虚拟环境2.1、 进入pytorch官网,复制如下的命令,进行pytorch的安装2.2、测试安装是否成功3、 通过pip命令安装pytorch&am…

基于WPS实现Excel表的二级下拉选择框

基于WPS实现Excel表的二级下拉选择框第一步:先在sheet2上创建源数据第二步:创建一级下拉框第三步:创建二级下拉框报错记录: “列表源”XXXXXX第一步:先在sheet2上创建源数据 第二步:创建一级下拉框 一级下…

难受啊,备战字节跳动132天,因为一个疏忽让我前功尽弃...

📌 博客主页: 程序员二黑 📌 专注于软件测试领域相关技术实践和思考,持续分享自动化软件测试开发干货知识! 📌 如果你也想学习软件测试,文末卡片有我的交流群,加入我们,一…

Kibana报错:Kibana server is not ready yet

背景 网页中访问kinaba http://localhost:5601 ,一直提示“Kibana server is not ready yet”。 执行如下命令查看kibana日志, docker logs kibana 发现有提示: 正文 怀疑是不是容器重启后,各容器内部ip变化了导致。 1、故执行如下命令查看…

Android框架源码分析——从设计模式角度看 RxJava 核心源码

从设计模式角度来看 RxJava 核心源码 从订阅者模式和装饰器模式的角度来看 RxJava 源码。 1. 普通订阅者模式与 RxJava 中的订阅者模式 订阅者模式又叫做观察者模式,主要用于实现响应式编程。其本质,就是接口回调。 普通订阅者模式:多个对…

来啦,华东师范大学2024年入学MBA提前面试流程及时间

项目简介华东师范大学系国家教育部和国务院学位办【2007(36)号】批准的工商管理硕士(MBA)培养单位。华东师范大学MBA项目,依托学校深厚的人文底蕴和育人文化,利用多学科支撑的优势、利用多元化的办学资源&a…