SpringSecurity(十六)---OAuth2的运行机制(中)-密码、客户端凭据授权类型以及刷新令牌

news2024/11/15 20:00:52

一、前言

本篇将讨论剩余的授权类型以及使用刷新令牌重新获得令牌等内容,仍然以概念为主。下一节我们将通过一个SSO实例让大家对授权码授权类型更加熟悉。

二、实现密码授权类型

此授权类型也被称为资源所有者凭据授权类型。使用此流程的应用程序会假定客户端收集用户凭据,并使用这些凭据进行身份验证,然后从授权服务器获得访问令牌。
在这里插入图片描述
如上图,密码授权类型会假设用户与客户端共享其凭据。客户端使用这些凭据从授权服务器获取令牌。然后,它会以用户名义从资源服务器访问资源。
不知道你还记不记得之前动手过的实践,只是我们没有实现JWT而已,但是思想架构和这个非常相似。当然在后面的学习中,我们会搭建一个真正的OAuth2的密码授权类型架构。
对于密码授权类型,我们应该期望应用程序向用户提供一个登陆表单,并让客户端负责向服务器发送用户凭据以进行身份验证。用户不需要知道我们如何在应用程序中设计身份验证职责。让我们看看使用密码授权类型时会发生什么。涉及的两项任务如下:
(1)请求一个访问令牌
(2)使用该访问令牌调用资源

步骤1:使用密码授权类型时请求访问令牌

使用密码授权类型,流程会简单很多。客户端会收集用户凭据并调用授权服务器来获取访问令牌。当请求访问令牌时,客户端还会在请求中发送以下详细信息:

  • 具有password值的grant_type。
  • client_id和client_secret,它们是客户端用于对其自身进行身份验证的凭据。
  • scope:可以将其理解为已授权权限。
  • username和password,它们是用户凭据。会以纯文本的形式将其作为请求头的值来发送。

客户端在响应中接收回一个访问令牌。接下来客户端就可以使用该访问令牌调用资源服务器的端点。

步骤2:使用密码授权类型时,需要使用访问令牌调用资源

一旦客户端有了访问令牌,它就可以使用该令牌调用资源服务器上的端点,这与授权码授权类型完全相同。客户端要在授权请求头中将访问令牌添加到请求。
ps密码授权类型比授权码授权类型更不安全,主要是因为其前提是要与客户端应用程序共享用户凭据。虽然它确实比授权码授权类型更简单,但是我们仍需尽量不把它放到实际开发中,而是将它放在理论示例当中去。

三、实现客户端凭据授权类型

这是OAuth2所描述的最简单的授权类型。可以在用户不参与的情况下使用它:也就是说,在两个应用程序之间实现身份验证时不需要用户参与。可以将客户端凭据授权类型看作密码授权类型和API密钥身份验证流程的组合。假设有一个使用OAuth2实现身份验证的系统。现在需要允许外部服务器进行身份验证并调用服务器暴露的特定资源。
在这里插入图片描述

客户端凭据授权类型的步骤与密码授权类型类似。唯一的例外是对访问令牌的请求不需要任何用户凭据。以下是实现这一授权类型的步骤:

步骤1:使用客户端凭据授权类型请求访问令牌

为了获得访问令牌,客户端要向授权服务器发送一个包含以下详细信息的请求。

  • 具有client_credentials值的grant_type;
  • client_id和client_secret,它们代表了客户端凭据;
  • scope,它表示已授权的权限。

作为响应,客户端将接收到一个访问令牌。接下来客户端可以使用该访问令牌调用资源服务器的端点。

步骤2:使用客户端凭据授权类型时,可访问令牌调用资源

一旦客户端有了访问令牌,它就可以使用该令牌调用资源服务器上的端点,这与授权码授权类型和密码授权类型完全相同。客户端要在授权请求头中将访问令牌添加到请求。

四、使用刷新令牌获得新的访问令牌

本节将讨论刷新令牌。到目前为止,本节已经介绍了OAuth2流程(也称为授权)的结果是一个访问令牌。但其中并没有过多谈论这个令牌本身。归根结底,OAuth2并没有为令牌预设一个特定的实现。接下来将会介绍,无论如何实现,令牌都可鞥过期。这并不是强制的——可以创建具有无限生命周期的令牌——但是,一般来说,都应该使其生命周期尽可能短。而本节将讨论的刷新令牌代表了使用凭据获取新访问令牌的另一种选择。这里将展示在OAuth2中刷新令牌是如何工作的,后面我们再讲具体实现。
在这里插入图片描述
假设在应用程序中实现了永不过期的令牌。这意味着客户端可以一次又一次地使用相同的令牌调用资源服务器上的资源。那么如果令牌被偷了,该怎么办?最后,不要忘记令牌作为一个简单的HTTP头信息被附加在每个请求上。如果令牌没有过期,得到令牌的人就可以使用它访问资源。不会过期的令牌太强大了。它变得几乎和用户凭据一样强大应该避免这种情况,并缩短令牌的生命周期。这样,过期的令牌就不能再使用了。客户端必须获得另一个访问令牌
要获得新的访问令牌,客户端可以根据所使用的的授权类型重新运行流程。例如,如果授权类型是身份验证授权码,则客户端会将用户重定向到授权服务器登录端点,用户必须再次填写他们的用户名和密码。这对用户不太友好,是吗?假设这个令牌的生命周期只有20分钟,而用户在这个在线应用程序上工作了两个小时。那么在这段时间里,这个应用程序会将用户重定向回去6次,以便再次登录为了避免重新进行身份验证授权服务器可以发出刷新令牌,它的值和用途与访问令牌不同。应用程序使用刷新令牌获得一个新的访问令牌,而不必重新进行身份验证
如何使用刷新令牌,从哪里获得刷新令牌,当使用授权码或密码授权类型等流程时,授权服务器将返回一个刷新令牌和一个访问令牌。对于客户端凭据授权,则不存在刷新令牌,因为此流程不需要用户凭据。一旦客户端有了一个刷新令牌,那么当访问令牌过期时,客户端应该发出一个包含以下详细信息的请求:

  • 具有refresh_token值得grant_type;
  • 具有刷新令牌值的refresh_token;
  • 具有客户端凭据的client_id和client_secret;
  • scope,它定义了相同或更少的授权权限。如果需要授权更多已授权的权限,则需要进行重新身份验证。

为了响应此请求,授权服务器会发出一个新的访问令牌和一个新的刷新令牌。
五、OAuth2的弱点
OAuth2并不是无懈可击的。它有其弱点,我们必须意识到这些弱点,并且在构建应用程序时必须考虑这些弱点,这里列举一些最常见的:

  • 在客户端上使用跨站请求伪造(CSRF)——用户已登录时,如果应用程序没有应用任何CSRF防护机制,则可能会遇到CSRF
  • 窃取客户端凭据——存储或传输未受保护的凭据会造成损失,使攻击者得以窃取和使用他们。
  • 重放令牌——这个后面会介绍,令牌时OAuth2身份验证和授权架构中用来访问资源的密钥。这些信息是通过网络发送的,但有时候,它们可能会被拦截。如果被截获,它们就被窃取了,并且可能再次使用。想象一下,如果你把你家大门钥匙弄丢了,会发生什么呢?其他人可以用它打开门,想打开多少次都可以(也就是所谓的令牌重放)
  • 令牌劫持——意味着有人入侵身份验证过程并窃取可以用来访问资源的令牌。这也是使用刷新令牌的一个潜在漏洞,因为这些令牌也可以被拦截并用于获取新的访问令牌.这里推荐一片有用的文章

http://blog.intothesymmetry.com/2015/06/on-oauth-token-hijacks-for-fun-and.html

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

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

相关文章

Spark 3.0 - 6.ML 自定义 Transformer 踩坑大全

目录 一.新征程开始 - 道阻且长 二.从源码入手 - 一探究竟 1.Tokenizer 2.UnaryTransformer 三.取源码精髓 - 照猫画虎 四.从实际出发 - 小试牛刀 五.扫重重障碍 - 补阙挂漏 1.Task not serializable 2.jsonEncode only supports string 3.Invisibility Error 4.Non…

补充(三)完善保密性三种定义的通俗表述及等价性的证明

目录 DEFINITION 2.3 完美保密加密方案的定义 LEMMA 2.5 完美保密方案的等价定义(一) LEMMA 2.7 完美保密方案的等价定义(二) 三个等价定义的通俗描述 等价性的证明(手写过程) DEFINITION 2.3 完美保密加密方案的定义 一个在明文空间M上的加密方案…

web前端期末大作业 html+css家乡旅游主题网页设计 湖北武汉家乡介绍网页设计实例

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法,如盒子的嵌套、浮动、margin、border、background等属性的使用,外部大盒子设定居中,内部左中右布局,下方横向浮动排列,大学学习的前端知识点和布局方式都有…

外卖项目05---套餐管理业务开发

套餐:一组菜品的集合 点击之后就会弹出下面的界面: 上面是后台的管理操作,下面是处理完成后在用户端展示的界面效果: 目录 一、新增套餐 70 1.1需求分析 70 1.2数据模型 70 ​编辑1.3新增套餐---代码开发---准备工作&梳理…

vtk.js滚动切片

关于滚动切片,官方有一个很好的例子,如下图: 关键代码 const mapper vtkImageMapper.newInstance(); mapper.setInputConnection(rtSource.getOutputPort()); mapper.setSliceAtFocalPoint(true);//这一行切片的光照焦点必须要设置为true,否…

CSDN周赛第十期总结

文章目录竞赛概述题解熊孩子摆拜访问题目描述数据范围样例输入样例输出代码走楼梯题目描述输入描述输出描述样例输入 1样例输出 1代码括号上色输入描述:输出描述:输入样例:输出样例:代码喜水青蛙题目描述输入描述:输出…

spark3.0.2搭建教程

spark3.0.2搭建教程 spark3.0.2安装教程 文章目录spark3.0.2安装教程一、前期准备二、spark搭建(一)搭建1、将spark上传到虚拟机上2、解压安装包(二)、standalone(独立部署)模型1、修改配置文件&#xff0…

学生HTML静态网页基础水平制作DIV+CSS+JavaScript技术制作美食网页——美食城6页面

👨‍🎓静态网站的编写主要是用HTML DIVCSS JS等来完成页面的排版设计👩‍🎓,常用的网页设计软件有Dreamweaver、EditPlus、HBuilderX、VScode 、Webstorm、Animate等等,用的最多的还是DW,当然不同软件写出的…

高等数学(第七版)同济大学 习题10-2(前10题) 个人解答

高等数学(第七版)同济大学 习题10-2(前10题) 函数作图软件:Mathematica 1.计算下列二重积分:\begin{aligned}&1. \ 计算下列二重积分:&\end{aligned}​1. 计算下列二重积分:​​ (1)∬D(x2y2)dσ,…

【构建ML驱动的应用程序】第 7 章 :使用分类器编写推荐

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

动态内存管理❀C

目录❀动态内存管理的意义❀动态内存管理函数malloc - 申请空间free - 释放空间calloc - 申请空间realloc - 调整空间大小❀常见的动态内存错误对NULL指针的解引用操作 - err对动态开辟空间的越界访问 - err对非动态开辟内存使用free释放 - err使用free释放一块动态开辟内存的一…

Pycharm安装配置Pyside6

PySide6是在Python环境下的一套Qt6 API库。使用PySide6可以轻松创建基于Qt6的GUI程序;PySide6由Qt官方维护。 1. Pyside6的安装: 直接安装在原python上面,在cmd里运行:(网速慢使用阿里源源) pip3 install Pyside6 -i https://p…

网络安全——逻辑漏洞之越权漏洞

作者名:Demo不是emo 主页面链接:主页传送门创作初心:舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷座右…

高通导航器软件开发包使用指南(8)

高通导航器软件开发包使用指南(8)7 电子速度控制器7.1 ESC固件更新7.1.1相关参数说明7.1.3在初始化期间启用更新7.1.4固件配置7.1.5固件从版本7.1.6更新程序7 电子速度控制器 7.1 ESC固件更新 高通公司Navigator支持ESC固件更新,无需连接或…

2022亚太C题详细思路

2022年亚太今日已经正式开赛,为了帮助大家更好的选题建模,这里首先对ABC三道题目进行浅要评析,以方便大家更好的择题。同时相关资料也会后续进行补充。预计明日公布各题统计选题人数以及较为完善的资料。今天作为第一天重要的是择好题&#x…

Tableau阈值设置及其使用

阈值又叫临界值,是指一个效应能够产生的最低值或最高值。 ——百度百科 文章目录前言一、案例中阈值的使用背景介绍二、设置阈值参数三、颜色区分四、可筛选设置总结前言 介绍Tableau阈值的设置,供各位小伙伴参考。本文案例来源于Tableau自带示例工作薄…

mysql 数据备份与恢复使用详解

一、前言 对一个运行中的线上系统来说,定期对数据库进行备份是非常重要的,备份不仅可以确保数据的局部完整性,一定程度上也为数据安全性提供了保障,设想如果某种极端的场景下,比如磁盘损坏导致某个时间段数据丢失&…

冒泡排序法

目录 一、问题 二、冒泡排序的思想 三、举例 四、算法分析 五、代码实现 一、问题 现有一个整型数组(乱序),并且写一个函数(Sort)对数组进行排序,顺序要求升序。 二、冒泡排序的思想 两两相邻的元素…

【100个 Unity实用技能】 | Unity自定义脚本的初始模版

Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。Unity 平台提供一整套完善的软件解决方案&#xff…