Oauth2.0实现token刷新功能

2023-11-11

扣扣技术分享交流群:1125844267

1、Oauth3.0简介

Oauth2.0是一个授权协议,提供了一种解决用户资源共享问题的思路,它不是一种实现。对于java来说,我们可以利用Spring Security OAuth2来实现。

Oauth2.0实现的最基本的思路:
这是Oauth2.0实现的最基本的思路
上图的名词解释:
上图的名词解释
几种授权模式:
几种授权模式
授权码模式基本思路:
授权码模式基本思路
微服务架构下的时序图:
微服务架构下的时序图

2、刷新token

(1)基本思路
首先我们要明白,在授权码模式下,在网关请求获取access token的时候,接口会返回一个access token和一个refresh token,我会将这两个值都保存到前端cookies中,每次请求都携带这两个值,网关在验证access token过期后,立马利用refresh token请求接口换去一个新的access token,这个时候接口同样返回两个值,一个access token和refresh token,但是需要注意的是,如果不加特殊配置,refresh token的过期时间的固定不变的。所以,也可能导致用户在使用中突然退出系统,所以,我觉得在刷新access token的时候,同样刷新refresh token也是必要的。
(2)代码实现
在这里插入图片描述
Oauth授权服务配置:

  • 1中的配置就是为了在刷新access token的时候能够将refresh token的过期时间也刷新一下;
  • 3中的配置是内容增强器的配置,在生成的jwt(access token)中添加自定义属性,具体内容增强器的实现自行百度;
  • 2中的配置之前是没有的,在实现刷新token时一直报错,在追踪源码,看了别人的配置后加上这个验证用户名密码的实现就可以了

那么最重要的一个点就是在网关这儿。我们要想实现在用户无感的情况下更新token,那么就不能影响本次的请求的情况下去刷新token。既然每次请求都会走网关,那么每次服务返回的结果肯定也会走网关。那么我们结合Spring Cloud Gateway官网了解一下整个请求的过程。
在这里插入图片描述
我们可以清晰的看到,请求和返回各自有各自的一条路线,并且都会经过一堆过滤器,那么我们就可以在本次请求刷新token成功后,继续本次请求到服务,然后在它返回的过程中将刷新的access token和refresh token加入到返回头中给前端保存
全局过滤器中的实现:
在这里插入图片描述
**注意:**有时候可能配置多了会报一些莫名其妙的错误,我们一定要注意过滤器的顺序问题,可以适当的改变一下顺序可能就没问题了
在这里插入图片描述
前端的部分这里就不再赘述,加拦截器,每个返回的结果检查有没有access token和refresh token,有的话就更新。

其实,在实现之前也百度了很多,但是没有找到刷新token的实现,我这个只是一种思路,如果大家有更好的实现方式,大家可以评论交流!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Oauth2.0实现token刷新功能 的相关文章

随机推荐

  • fullCalendar日程表在Vue项目中的应用

    fullCalendar日程表在Vue项目中的应用 fullCalendar相关API 使用fullCalendar插件在项目中实现日程排版 支持天 月日程转换 自定义事件 页面布局 通过按钮切换天与月视图的转换 天视图回显具体的时分排版项
  • 物联网LoRa系列-21:LoRa终端--射频芯片SX1261 SX1262的FSK调制解调器与配置

    目录 1 SX1261 2功能模块 2 调制技术的基本原理 3 FSK调制技术的基本原理 4 SX1261 2的FSK调制器主要的性能参数 5 SX1261 2的FSK调制器主要寄存器设置 1 SX1261 2功能模块 MCU与SX1261
  • Linux I/O(输入和输出)

    1 文件I O 1 文件描述符 对于内核而言 所有打开的文件都通过文件描述符引用 文件描述符通常是一个小的非负整数 内核用它标识一个特定进程正在访问的文件 当内核打开一个已有文件或创建一个新文件时 它返回一个文件描述符 2 按照惯例 UNI
  • 68.文件操作(打开、读写和关闭)&69.文件操作(文件读写位置)& 70 ftell 、feof、‘EOF‘

    函数库的使用 不要类比字符串函数 仅掌握正确使用 不考虑如何实现 文件有编号 暂时认为是文件指针 FILE指针 文件指针 句柄 实际上是结构体的重定义 struct file int fd typedef struct file FILE
  • C语言从键盘上输入一个大写字母,C语言编程输入一个字符,如果它是一个大写字 – 手机爱问...

    2008 03 17 设计字符界面application程序 输入一字符 如果为小写字母 则转换为大写字符 如果为大写字母 则转换为小写字母 其它字符不变 我写了下 总是错误 帮忙看下 import java awt import java
  • anaconda3在创建虚拟环境中途出错,想要删掉,如何删彻底

    这个文件夹里面是专门放不同环境中的包的 只是没有区分环境 都混在一起了 一般在想要删除一个虚拟环境 除了在命令行中输入conda remove n your env name 虚拟环境名称 all 然后在envs中删除虚拟环境的文件夹 还可
  • Kanzi学习教程培训教程-Kanzi的简介和安装

    如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额1元起步 多少随意 锋影 e mail 174176320 qq com Kanzi UI Solution是一个完整的UI解决方案 为嵌入式的UI的设计 开发和部
  • QLineEdit 设置输入掩码

    背景 QLineEdit 是单行文本编辑器 常用于界面中的文本输入 QLineEdit 提供了 inputMask 使用一些特定到字符来设置输入的格式和内容 inputMask 概述 输入掩码包括两部分组成 之前是输入格式及占位符设置 之后
  • pytorch的学习

    torch save net1 net pkl 保存entire net整个网络 torch save net1 state dict net params pkl 保存参数
  • MySQL5.7忘记root密码-手动修改密码教程

    MySQL 5 7相对于MySQL 5 6在应用上发生了一些新的变化 这里就MySQL5 7忘记root密码情况下 手动去修改root密码做一些介绍 操作系统 Windows10 数据库版本 MySQL 5 7 20 1 Windows10
  • TCL中变量嵌套使用

    TCL中变量嵌套使用 在使用多重嵌套变量时候 因为 对于tcl来说属于非运算符号 因此在使用变量嵌套 直接调用会出现问题 即变量不能正确调用 set mm list 0 1 set nn list 2 3 set index mm puts
  • 憨批的语义分割重制版5——Keras 搭建自己的Unet语义分割平台

    憨批的语义分割重制版5 Keras 搭建自己的Unet语义分割平台 注意事项 学习前言 什么是Unet模型 代码下载 Unet实现思路 一 预测部分 1 主干网络介绍 2 加强特征提取结构 3 利用特征获得预测结果 二 训练部分 1 训练文
  • OC语言学习 (三) 成员变量get/set方法和“.”语法,@proterty和@synthesize关键字

    Person h objc view plain copy print ifndef oc Person h define oc Person h interface Person NSObject int age protected fl
  • 蓝桥杯第一期模拟赛 英文转换 C语言

    英文转换 问题描述 输入一个由小写英文字母组成的字符串 请将其中的元音字母 a e i o u 转换成大写 其它字母仍然保持小写 输入格式 输入一行包含一个字符串 输出格式 输出转换后的字符串 样例输入 lanqiao 样力输出 lAnqI
  • 印刷企业如何利用MES管理系统实现智能计划排产

    在数字化时代 印刷企业面临着日益激烈的市场竞争和不断攀升的成本压力 为了提高生产效率和质量 印刷企业需要采用先进的生产管理系统 其中 MES生产管理系统已成为实现智能计划排产的重要工具 本文将探讨如何利用印刷MES管理系统实现印刷企业的智能
  • 让你的群晖NAS支持DTS!

    由于版权群晖的video station不支持dts 所以我简单的说一下如何安装套件让其支持dts解码 下面只文字阐述 1 打开套件中心 点击设置 2 进入套件来源 新增 名称 SynoCommunity 位置 http packages
  • matlab_非线性优化

    求解非线性问题 min z f x s t c x 0 ceqx 0 Ax b Aeqx beq lb x ub fmincon函数 x fval exitflag output lambda grad hessian fmincon fu
  • linux svn版本管理命令

    1 svn merge回滚 1 先 svn up 保证更新到最新的版本 如2106 2 然后用 svn log 查看历史修改 找出要恢复的版本 如2105 如果想要更详细的了解情况 可以使用svn diff r 2105 2106 文件或目
  • GPU渲染管线之旅

    在这一部分中 我们来谈谈像素处理的前半部分 dispatch和实际的像素着色 事实上 这部分是大多数图形开发者在谈到PS stage时所关心的内容 有关alpha blend和Late Z的内容则会下一篇文章中去探讨 后面我们会看到 在硬件
  • Oauth2.0实现token刷新功能

    扣扣技术分享交流群 1125844267 1 Oauth3 0简介 Oauth2 0是一个授权协议 提供了一种解决用户资源共享问题的思路 它不是一种实现 对于java来说 我们可以利用Spring Security OAuth2来实现 Oa