当前位置: 首页 > 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,实现一个生产可用的前后端分离的授权服务器。

http://www.lryc.cn/news/531287.html

相关文章:

  • 信息学奥赛一本通 2113:【24CSPJ普及组】小木棍(sticks) | 洛谷 P11229 [CSP-J 2024] 小木棍
  • 安装hami的笔记
  • 【区块链】区块链密码学基础
  • 强化学习笔记(5)——PPO
  • 【C语言入门】解锁核心关键字的终极奥秘与实战应用(三)
  • 寒假day10
  • 本地部署与使用SenseVoice语音大模型简析
  • Kafka SASL/SCRAM介绍
  • 中间件漏洞之CVE-2024-53677
  • pytorch基于 Transformer 预训练模型的方法实现词嵌入(tiansz/bert-base-chinese)
  • Windows电脑本地部署运行DeepSeek R1大模型(基于Ollama和Chatbox)
  • 区间覆盖问题
  • 【LLM-agent】(task2)用llama-index搭建AI Agent
  • SpringAI 人工智能
  • 【axios二次封装】
  • P7497 四方喝彩 Solution
  • 深入剖析 Bitmap 数据结构:原理、应用与优化策略
  • bypass hcaptcha、hcaptcha逆向
  • WebForms DataList 深入解析
  • C# List 列表综合运用实例⁓Hypak原始数据处理编程小结
  • 【C++基础】字符串/字符读取函数解析
  • 大模型-CLIP 详细介绍
  • 1.4 Go 数组
  • WebSocket——环境搭建与多环境配置
  • 三、递推关系与母函数,《组合数学(第4版)》卢开澄 卢华明
  • 线程互斥同步
  • DeepSeek R1 AI 论文翻译
  • 如何计算态势感知率?
  • 二、CSS笔记
  • Alibaba开发规范_异常日志之日志规约:最佳实践与常见陷阱