OAuth2

news2024/9/24 5:27:32

目录

  • 一、什么是OAuth2.0
  • 二、OAuth2中的角色
  • 三、认证流程
  • 四、生活中的Oauth2思维
  • 5. 令牌的特点
  • 6.OAuth2授权方式
    • 6.1 授权码
    • 6.2 隐藏方式
    • 6.3 密码方式
    • 6.4 凭证方式

一、什么是OAuth2.0

OAuth2.0是目前使用非常广泛的授权机制,用于授权第三方应用获取用户的数据。 举例说明:
在这里插入图片描述
用户可以通过选择其他登录方式来使用gitee,这里就使用到了第三方认证。
来自RFC 6749

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

二、OAuth2中的角色

1. 资源所有者
能够授予对受保护资源的访问权限的实体,如果资源的所有者为个人,也被成为最终用户
2. 资源服务器
存储有受保护资源的服务器, 能够接受并验证访问令牌,并响应受保护资源的访问请求
3. 客户
需要被授权,然后再访问受保护资源的实体。客户这个术语,并不是特指应用程序,服务器,计算机
等。
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
https://b.com/oauth/authorize?
response_type=code&
client_id=CLIENT_ID&
redirect_uri=CALLBACK_URL&
scope=read
redirect_uri=CALLBACK_URL, 认证服务器接受请求之后的调转连接,可以根据这个连接将生成
的code发送给资源服务器
scope=read,授权范围为只读
2. 页面跳转后,用户登录认证服务器,同意或拒绝资源服务器的授权请求,认证服务器根据上一步的
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

认证服务器验证身份通过后,直接在响应中发放令
牌,资源服务器在响应中获取令牌。

6.4 凭证方式

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

  1. 资源服务器使用命令行向认证服务器发送请求
https://oauth.b.com/token?
grant_type=client_credentials&
client_id=CLIENT_ID&
client_secret=CLIENT_SECRET

https://oauth.b.com/token?
grant_type=client_credentials&
client_id=CLIENT_ID&
client_secret=CLIENT_SECRET

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

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

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

相关文章

PythonWeb Django框架学习笔记

文章目录Django一、初步了解Django1.1 创建项目1.2 文件介绍1.3 APP的创建和说明添加新的app注册app创建页面1.4 templates模板templates语法单一变量列表循环【列表】字典循环【字典】列表套字典条件判断templates小结1.5 请求和响应案例:用户管理二、数据库操作2.…

前言技术之mybatis-plus 01

目录 1.什么是mybatis-plus 2.初体验 3.日志 4.主键生成策略 5.更新 6.自动填充 1.什么是mybatis-plus 升级版的mybatis,目的是让mybatis更易于使用, 用官方的话说“为简化而生” 官网: MyBatis-Plus 2.初体验 1.准备数据库脚本 数据…

再获殊荣!天云数据入选第一批北京市级企业技术中心,Hubble数据库提供新一代信息技术科技服务

为助力北京国际科技创新中心建设,贯彻落实北京市“十四五”时期高精尖产业发展规划,引导和支持企业加强创新能力,培育和引导企业技术中心建设,北京市经济和信息化局组织开展了2022年度第一批北京市市级企业技术中心的创建工作&…

【Python学习笔记】5. Python3 基本数据类型(上)——数值型、字符串型

前言 Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。 Python3 基本数据类型 Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。 在 Python 中,变量就是变…

tomcat配置多个host,并且避免重复加载

目录 1.实验描述 2.实验环境 2.实验过程 2.1 创建order和user项目 2.2 打包项目 2.3 修改tomcat的server.xml的配置 2.4 启动tomcat 2.5 配置本地host 2.6 验证 1.实验描述 目前有两个域名,分别是: order.abc.com user.abc.com 两个项目&…

微信小程序学习第1天:微信小程序开发入门介绍

前言:微信小程序开发模式 1、申请小程序开发账号 2、安装小程序开发者工具 3、创建和配置小程序项目 一、申请小程序开发账号 1、体验小程序 2、注册小程序开发账号 使用浏览器打开https://mp.weixin.qq.com网址,按照提示注册 注册承购后&#xff0c…

微服务 初始 分布式搜索引擎 Elastic Search

文章目录⛄引言一、什么是Elastic Search?二、Elastic Search 倒排索引⛅正向索引⚡倒排索引⛄正向和倒排三、ES的一些概念⛅文档和字段⚡索引和映射四、MySQL 与 Elasticsearch⛵小结⛄引言 本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源…

OBB的计算python实现

OBB的计算python实现1. 实现步骤步骤① 分解点集的xyz分量步骤② 对x、y、z这三个随机变量(一维数组)求协方差矩阵步骤③ 对步骤②中的协方差矩阵求解特征值与特征向量,特征向量构造列向量矩阵M步骤④ 将点集的几何中心平移至坐标系原点&…

最全java面试题及答案(208道)

本文分为十九个模块,分别是:「Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM」 ,如下图所…

Discord怎么抢白名单?Discord多账号防关联可以提高白名单成功率

Discord作为一个社交媒体,在加密货币领域扮演着重要的角色,它强大而便捷。更重要的是,如果你是一个投资者,Discord无疑是你了解项目动态,深入社区沟通交流的重要工具。 相信很多玩NFT和Web3的朋友都不会对discord 陌生…

分位数的理解与查询

目录 分位数的定义与理解: pyspark 中分位数查询 方式1 : 某列分位数查询: 采用dataframe的approxQuantile属性,返回一个list 例子: 方式2 : 转换为toPandas,利用pandas.dataframe利的…

全志T113-i+玄铁HiFi4开发板硬件说明书(2)

前 言 本文档主要介绍开发板硬件接口资源以及设计注意事项等内容,测试板卡为全志T113-i+玄铁HiFi4开发板,由于篇幅问题,本篇文章共分为上下两集,点击账户可查看更多内容详情,开发问题欢迎留言,感谢关注。 T113-i处理器的IO电平标准一般为1.8V和3.3V,上拉电源一般不超过…

【C++入门】命名空间的定义与使用

目  录1 命名空间1.1 命名空间定义1.2 命名空间使用1 命名空间 在C/C中,变量、函数和类都是大量存在的,这些变量、函数、类的名称将都存在于全局作用域中,可能会导致很多冲突。 使用命名空间的目的是对标识符的名称进行本地化,以…

经典动态规划OJ题目:接雨水or接青豆(多种方法,附详详细思维过程、解析及源码)

作者:非妃是公主 专栏:《算法》《刷题笔记》 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 《算法》专栏系列文章 算法设计与分析复习01:主方法求递归算法时间复杂度 算法设计与分析…

MySQL批量插入4种方案(对比速度起飞)

一、前言二、准备工作1、Maven项目中pom.xml文件引入的相关依赖如下2、application.yml配置属性文件内容(重点:开启批处理模式)3、Entity实体类(测试)4、数据库student表结构(注意:无索引&#…

4.2 避免缩进错误

4.1.3 在for循环结束后执行一些操作for循环结束后再怎么做呢?通常,你需要提供总结性输出或接着执行程序必须完成的其他任务。在for循环后面,没有缩进的代码都只执行一次,而不会重复执行。下面来打印一条向全体魔术师致谢的消息,感谢他们的精…

爬虫实例(一) —— 5行 Python 代码爬取

大家好,我是 Enovo飞鱼,今天分享一个爬虫小案例,小白或者爬虫入门的小伙伴推荐阅读,加油💪。 目录 前言 基本环境配置 爬取目标网站 爬取内容 实现代码 后面我会继续更新爬虫实例,与大家共同学习&am…

ubuntu设置双网卡以及多网段

前提设备有两个网卡,分别作为内网和外网,比如两个网卡eth0和eth1,eth0作为外网,eth1作为内网,每个人的网卡名称可能不一样,网卡名称可以自行查看,使用ifconfig命令:ifconfig区分内网和外网的ip外网网卡&…

如何使用 Apache IoTDB 中的 UDF

本篇作者:IoTDB 社区 -- 廖兰宇本文将概述用户使用 UDF 的大致流程,UDF 的详细使用说明请参考官网用户手册:https://iotdb.apache.org/zh/UserGuide/Master/Operators-Functions/User-Defined-Function.html1编写 UDFIoTDB 为用户提供编写 UD…

opensuse15.4安装android-studio-2021.1.1.23_未完成

opensuse15.4安装android_studio再运行微信apk_未完成 未完成的原因是:本人台式机的物理内存为4G,官方要求是16G android studio与android sdkj是两个完全不同的两样东西。 Android studio是一个IDE(可视化开发工具)跟eclipse一…