当前位置: 首页 > news >正文

基于Spring Security 6的OAuth2 系列之十 - 授权服务器--刷新token

之所以想写这一系列,是因为之前工作过程中使用Spring Security OAuth2搭建了网关和授权服务器,但当时基于spring-boot 2.3.x,其默认的Spring Security是5.3.x。之后新项目升级到了spring-boot 3.3.0,结果一看Spring Security也升级为6.3.0。无论是Spring Security的风格和以及OAuth2都做了较大改动,里面甚至将授权服务器模块都移除了,导致在配置同样功能时,花费了些时间研究新版本的底层原理,这里将一些学习经验分享给大家。

注意由于框架不同版本改造会有些使用的不同,因此本次系列中使用基本框架是 spring-boo-3.3.0(默认引入的Spring Security是6.3.0),JDK版本使用的是19,本系列OAuth2的代码采用Spring Security6.3.0框架,所有代码都在oauth2-study项目上:https://github.com/forever1986/oauth2-study.git

目录

  • 1 使用Postman刷新access_token
  • 2 刷新token原理

上一章我们对token已经做了比较深入的了解,但是还漏了一个点,就是token刷新。前面说过默认情况下access_token是会过期的,因此需要刷新access_token

1 使用Postman刷新access_token

1)启动lesson04子模块,作为授权服务器

2)参考上一章《系列之九 - 授权服务器–token的获取》中1.1使用Postman获取token,进行前4步,得到access_token和refresh_token

3)刷新token,访问:http://localhost:9000/oauth2/token,配置如下两个图:

跟获取token的接口一样,需要配置Authorization和Body

在这里插入图片描述

在这里插入图片描述

4)这时候你就会获取到新的access_token

2 刷新token原理

1)我们从接口/oauth2/token就可以知道其使用的还是OAuth2TokenEndpointFilter过滤器,其中2个步骤比较重要,如下图

在这里插入图片描述

我们这里可以记住一个准则,在本次系列中,你会看到Filter过滤器处理过程一般都是通过Converter转换请求过来的参数,然后再通过Provider进行逻辑处理。这是一般的准则,后面很多底层原理直接看这2个不同实现类就能看出来。

2)第一步中的authenticationConverter其实是使用OAuth2RefreshTokenAuthenticationConverter实现类,其处理如下图:

在这里插入图片描述

3)第二步,使用authenticationManager进行认证,最终其实是使用OAuth2RefreshTokenAuthenticationProvider实现类进行认证并生成token,OAuth2RefreshTokenAuthenticationProvider代码比较长这里不贴,就说几个比较重要的点

  • 先去authorizationService获取内存或者数据库存储的授权信息,并判断refresh_token是否有效
  • 使用tokenGenerator代理token生成器,分别生成access_token、refresh_token以及id_token
  • 将新生成的数据重新调用authorizationService保存
  • 返回token数据

结语:本章我们讲解了刷新token的方式以及原理。到目前为止,我们已经对Spring Security实现的授权服务器有了比较深入的了解。下面我们将结合Spring Security,实现一个生产可用的前后端分离的授权服务器。

相关文章:

基于Spring Security 6的OAuth2 系列之十 - 授权服务器--刷新token

之所以想写这一系列,是因为之前工作过程中使用Spring Security OAuth2搭建了网关和授权服务器,但当时基于spring-boot 2.3.x,其默认的Spring Security是5.3.x。之后新项目升级到了spring-boot 3.3.0,结果一看Spring Security也升级…...

信息学奥赛一本通 2113:【24CSPJ普及组】小木棍(sticks) | 洛谷 P11229 [CSP-J 2024] 小木棍

【题目链接】 ybt 2113:【24CSPJ普及组】小木棍(sticks) 洛谷 P11229 [CSP-J 2024] 小木棍 【题目考点】 1. 思维题,找规律 【解题思路】 解法1:找规律 该题为:求n根木棍组成的无前导0的所有可能的数…...

安装hami的笔记

k3s环境下安装hami提示如下错误: "failed to “StartContainer” for “kube-scheduler” with InvalidImageName: "Failed to apply default image tag “registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.31.2k3s1”: 没有Inva…...

【区块链】区块链密码学基础

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 区块链密码学基础引言一、哈希函数1.1 基本概念1.2 数学表达 二、非对称加密2.1…...

强化学习笔记(5)——PPO

PPO视频课程来源 首先理解采样期望的转换 变量x在p(x)分布下,函数f(x)的期望 等于f(x)乘以对应出现概率p(x)的累加 经过转换后变成 x在q(x)分布下,f(x)*p(x)/q(x) 的期望。 起因是:求最大化回报的期望,所以对ceta求梯度 具体举例…...

【C语言入门】解锁核心关键字的终极奥秘与实战应用(三)

目录 一、auto 1.1. 作用 1.2. 特性 1.3. 代码示例 二、register 2.1. 作用 2.2. 特性 2.3. 代码示例 三、static 3.1. 修饰局部变量 3.2. 修饰全局变量 3.3. 修饰函数 四、extern 4.1. 作用 4.2. 特性 4.3. 代码示例 五、volatile 5.1. 作用 5.2. 代码示例…...

寒假day10

第十天:请写出以下几个数据的类型 整数 a int a的地址 int* 存放a的数组b …...

本地部署与使用SenseVoice语音大模型简析

前言 SenseVoice 是一种语音基础模型,具有多种语音理解功能,包括自动语音识别 (ASR)、口语识别 (LID)、语音情感识别 (SER) 和音频事件检测 (AED)。本博客将指导您安装和使用 SenseVoice 模型,使其尽可能方便用户使用。 Github 仓库链接: ht…...

Kafka SASL/SCRAM介绍

文章目录 Kafka SASL/SCRAM介绍1. SASL/SCRAM 认证机制2. SASL/SCRAM 认证工作原理2.1 SCRAM 认证原理2.1.1 密码存储和加盐2.1.2 SCRAM 认证流程 2.2 SCRAM 认证的关键算法2.3 SCRAM 密码存储2.4 SCRAM 密码管理 3. 配置和使用 Kafka SASL/SCRAM3.1 Kafka 服务器端配置3.2 创建…...

中间件漏洞之CVE-2024-53677

目录 什么是struts?CVE-2024-53677简介影响版本复现环境搭建漏洞利用修复 什么是struts? 在早期的 Java Web 开发中,代码往往混乱不堪,难以维护和扩展。比如,一个简单的用户登录功能,可能在不同的 Java 类…...

pytorch基于 Transformer 预训练模型的方法实现词嵌入(tiansz/bert-base-chinese)

以下是一个完整的词嵌入(Word Embedding)示例代码,使用 modelscope 下载 tiansz/bert-base-chinese 模型,并通过 transformers 加载模型,获取中文句子的词嵌入。 from modelscope.hub.snapshot_download import snaps…...

Windows电脑本地部署运行DeepSeek R1大模型(基于Ollama和Chatbox)

文章目录 一、环境准备二、安装Ollama2.1 访问Ollama官方网站2.2 下载适用于Windows的安装包2.3 安装Ollama安装包2.4 指定Ollama安装目录2.5 指定Ollama的大模型的存储目录 三、选择DeepSeek R1模型四、下载并运行DeepSeek R1模型五、常见问题解答六、使用Chatbox进行交互6.1 …...

区间覆盖问题

文章目录 1. 题面2. 简单分析3. 代码解答4. TLE的2点可能 1. 题面 给定 N N N个区间 [ a i , b i ] [a_i,b_i] [ai​,bi​] 以及一个区间 [ s , t ] [s,t] [s,t],请你选择尽量少的区间,将指定区间完全覆盖。 输出最少区间数,如果无法完全…...

【LLM-agent】(task2)用llama-index搭建AI Agent

note LlamaIndex 实现 Agent 需要导入 ReActAgent 和 Function Tool,循环执行:推理、行动、观察、优化推理、重复进行。可以在 arize_phoenix 中看到 agent 的具体提示词,工具被装换成了提示词ReActAgent 使得业务自动向代码转换成为可能&am…...

SpringAI 人工智能

随着 AI 技术的不断发展,越来越多的企业开始将 AI 模型集成到其业务系统中,从而提升系统的智能化水平、自动化程度和用户体验。在此背景下,Spring AI 作为一个企业级 AI 框架,提供了丰富的工具和机制,可以帮助开发者将…...

【axios二次封装】

axios二次封装 安装封装使用 安装 pnpm add axios封装 // 进行axios二次封装:使用请求与响应拦截器 import axios from axios import { ElMessage } from element-plus//创建axios实例 const request axios.create({baseURL: import.meta.env.VITE_APP_BASE_API,…...

P7497 四方喝彩 Solution

Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1​,a2​,⋯,an​),有 m m m 个操作,分四种: add ⁡ ( l , r , v ) \operatorname{add}(l,r,v) add(l,r,v):对于所有 i ∈ [ l , r ] i \in [l,r…...

深入剖析 Bitmap 数据结构:原理、应用与优化策略

深入理解 Bitmap 数据结构 一、引言 在计算机科学领域,数据的高效存储和快速处理一直是核心问题。随着数据量的不断增长,如何用最少的空间和最快的速度来表示和操作数据变得至关重要。Bitmap(位图)作为一种简洁而强大的数据结构…...

bypass hcaptcha、hcaptcha逆向

可以过steam,已支持并发,欢迎询问! 有事危,ProfessorLuoMing...

WebForms DataList 深入解析

WebForms DataList 深入解析 引言 在Web开发领域,控件是构建用户界面(UI)的核心组件。ASP.NET WebForms框架提供了丰富的控件,其中DataList控件是一个灵活且强大的数据绑定控件。本文将深入探讨WebForms DataList控件的功能、用法以及在实际开发中的应用。 DataList控件…...

OpenClaw技能市场巡礼:Qwen3-32B生态实用工具

OpenClaw技能市场巡礼:Qwen3-32B生态实用工具 1. 为什么需要技能市场? 第一次接触OpenClaw时,我被它的基础能力震撼——能像人类一样操作我的电脑,完成文件整理、网页搜索等任务。但真正让我决定长期使用的,是发现它…...

解决k8s集群中containerd运行时拉取HTTP私有Harbor镜像的配置难题

1. 为什么需要配置HTTP私有Harbor镜像拉取 最近在帮客户部署Kubernetes集群时,遇到了一个典型问题:使用containerd作为容器运行时,无法从内网HTTP协议的Harbor私有仓库拉取镜像。这个问题其实很常见,特别是很多企业内网环境中&…...

从Markdown到清晰语音:我是如何用ttsfrd + CosyVoice模型搞定技术文档朗读的

从Markdown到清晰语音:技术文档朗读的工程化实践 每天早上七点,我都要挤进这座城市最拥挤的地铁线。作为开发者,通勤时间曾是知识更新的黑洞——直到我发现将技术文档转为语音的解决方案。这不仅改变了我的学习方式,更为视障程序员…...

Auto-Photoshop-StableDiffusion-Plugin:在Photoshop中无缝集成AI图像生成的技术实现方案

Auto-Photoshop-StableDiffusion-Plugin:在Photoshop中无缝集成AI图像生成的技术实现方案 【免费下载链接】Auto-Photoshop-StableDiffusion-Plugin A user-friendly plug-in that makes it easy to generate stable diffusion images inside Photoshop using eithe…...

智能风扇管家:FanControl如何让你的电脑安静又高效

智能风扇管家:FanControl如何让你的电脑安静又高效 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/Fa…...

嵌入式WiFi开发 | 基于wireless_tools的交叉编译实战与移植指南

1. 嵌入式WiFi开发入门:为什么需要wireless_tools? 在嵌入式Linux开发中,网络连接能力往往是刚需。想象一下你的智能家居设备需要自动连接路由器,或者工业传感器需要通过WiFi上传数据——这些都离不开可靠的无线网络配置工具。这就…...

MoveIt新手避坑:Gazebo仿真时遇到‘Unable to identify controllers‘报错,检查这个launch文件就对了

MoveIt新手避坑:Gazebo仿真时遇到Unable to identify controllers报错解决方案 当你第一次尝试在Gazebo中运行MoveIt控制机械臂时,看到终端弹出鲜红的报错信息"Unable to identify any set of controllers that can actuate the specified joints&q…...

三、从零解析Franka ROS2控制器:以关节位置控制为例

1. Franka机械臂与ROS2控制器基础 如果你刚接触机器人控制,Franka机械臂搭配ROS2绝对是个不错的起点。Franka Emika机械臂以其高精度和易用性著称,而ROS2作为机器人操作系统的最新版本,提供了更强大的实时性和分布式能力。我第一次用Franka做…...

Unity Input System手势识别避坑指南:为什么你的双指缩放总是不跟手?

Unity Input System手势识别避坑指南:为什么你的双指缩放总是不跟手? 当你在Unity中实现双指缩放功能时,是否遇到过这样的问题:用户手指明明在屏幕上流畅滑动,但画面却像卡顿了一样,或者缩放比例突然跳变&a…...

论文省心了!2026年实力出众的专业AI论文写作工具

2026年AI论文写作工具已从“内容生成”进化为多维度学术支持系统,核心评价维度包括文献真实性、格式合规性、长文本逻辑、查重降重、AIGC合规与多语言适配能力。本次测评覆盖6款主流工具,涵盖中文与英文场景,支持全流程与专项功能&#xff0c…...