实现无感刷新Token技术:.Net Web API与axios的完美结合

news/2025/1/12 21:26:36/文章来源:https://www.cnblogs.com/firespeed/p/18667353

备忘:https://mp.weixin.qq.com/s?__biz=MjM5MDE5MDM5NA==&mid=2449944319&idx=1&sn=71e84d8ee24769e77b19ca8367333b8f&chksm=b1bb10aa86cc99bc2f20686354e8184023278de74dba857a42d720dc47fabb654c12ecb83524&scene=21#wechat_redirect

我们都知道Token是有设置有效期的,为了安全都不会设置过长的有效期;但设置有效期太短,又会导致经常需要重新登录。

这就需要无感刷新Token的方案,来提升用户体验。

目前比较常用的方案是:双token机制。1、登录时同时返回:Token、RefreshToken,Token用于请求业务接口,RefreshToken用于刷新Token接口;2、每一次Http请求,客户端都会判断服务器返回状态,如果是401,代表Token过期;3、客户端使用RefreshToken,请求服务器Token刷新接口,并获取新的:Token,RefreshToken;

4、如果第3步骤成功返回,更新本地的Token、RefreshToken;如果返回失败,代表RefreshToken也过期了,提示过期并跳转至登录页面。

下面我们一起看下实现步骤:

1、后台登录接口

登录验证,验证用户名和密码,验证通过返回Token。

 

登录接口返回的2个内容:Token和RefreshToken,这两个有效期不一样,比如Token有效期是30分钟,RefreshToken有效期是60分钟。

 

2、后台刷新token接口

和登录接口一样,也是返回:Token和RefreshToken。

 

3、前端登录功能

在前端登录页面,成功登录后,把Token和RefreshToken存储在本地,可以存储在Cookie或者LocalStorage。

 4、错误响应拦截器

axios响应拦截器添加如下代码:a、判断Http返回状态是否为401。b、判断是否授权信息是否使用refreshToken,调用刷新token接口,同样也会发起Http请求,如果refreshToken也过期了,同样会返回401;所以这边要加判断,避免进入死循环。c、如果refreshToken也过期了,直接跳转至登录页面。

d、如果调用刷新token接口成功返回,更新本地存储的Token、RefreshToken;并获取上一次业务请求的内容,并更新验证信息,重新发起上一次业务请求,这样才能实现无感刷新。

 

5、实现效果

最终实现效果如下:1、请求用户列表接口,返回401;2、调用token刷新接口;

3、重新请求用户列表接口。

在这过程中,第一次发起用户搜索请求是失败的,我们马上刷新token,并重新发起第二次用户搜索请求,但对用户来说是透明、毫无察觉的。

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

方法引用与lambda底层原理Java方法引用、lambda能被序列化么?

系列文章目录和关于我 0.引入 最近笔者使用flink实现一些实时数据清洗(从kafka清洗数据写入到clickhouse)的功能,在编写flink作业后进行上传,发现运行的时候抛出:java.io.NotSerializableException,错误消息可能类似于 “org.apache.flink.streaming.api.functions.MapFu…

Java方法引用、lambda如何序列化方法引用与lambda底层原理

系列文章目录和关于我 0.引入 最近笔者使用flink实现一些实时数据清洗(从kafka清洗数据写入到clickhouse)的功能,在编写flink作业后进行上传,发现运行的时候抛出:java.io.NotSerializableException,错误消息可能类似于 “org.apache.flink.streaming.api.functions.MapFu…

2024年秋学期 分析力学(理论物理基础Ⅰ)笔记

内容说明舍去了哈密顿雅可比方程等内容 删去了振动相关的一些模型,如参数共振等 授课难度疑似过大了一点(毕竟才半个学期),协变相关内容疑似太tm多了 有心力场模块笔记有所省略,部分笔记不排除记录有误的可能性 部分章节间未换页笔记正文拉格朗日力学及其协变形式 哈密顿力…

find_package()使用指南

关于find_package() 在使用cmake引用第三方库(比如OpenCV)时,我们总是使用find_package()这个指令来实现对包的查找(比如find_package(OpenCV))。调用完后就可以使用一些似乎凭空出现的变量如${OpenCV_INCLUDE_DIRS}以及${OpenCV_LIBS},分别指示了OpenCV库的头文件路径以及各个…

音视频:JavaCV 采集桌面画面并显示的方法

需要进行简单的音视频编程,如果不是特别熟悉C/C++,那么JavaCV应该是比较好的选择,下面记录一下使用JavaCV采集桌面数据的方法。 使用FFmpegFrameGrabber采集桌面数据,指定输入源为desktop,format设置为gdigrab。参考雷神的博客:https://blog.csdn.net/leixiaohua1020/art…

《深入理解Mybatis原理》MyBatis事务管理机制

概述 对数据库的事务而言,应该具有以下几点:创建(create)、提交(commit)、回滚(rollback)、关闭(close)。对应地,MyBatis将事务抽象成了Transaction接口:MyBatis的事务管理分为两种形式:使用JDBC的事务管理机制:即利用java.sql.Connection对象完成对事务的提交(…

【Python基础】Python虚拟环境

什么是Python环境 要搞清楚什么是虚拟环境,首先要清楚Python的环境指的是什么。当我们在执行python test.py时,思考如下问题:python哪里来? 这个主要归功于配置的系统环境变量PATH,当我们在命令行中运行程序时,系统会根据PATH配置的路径列表依次查寻是否有可执行文件pyth…

地平线 LiDAR-Camera 融合多任务 BEVFusion 参考算法-V1.0

该示例为参考算法,仅作为在 征程 6 上模型部署的设计参考,非量产算法。1.简介 激光雷达天然地具有深度信息,摄像头可以提供丰富的语义信息,它们是车载视觉感知系统中两个最关键的传感器。但是,如果激光雷达或者摄像头发生故障,则整个感知框架不能做出任何预测,这在根本上…

47. web框架

1. web框架本质 web框架本质上可以看成一个功能强大的socket服务端,用户的浏览器可以看成拥有可视化界面的socket客户端 通过网络请求实现数据交互,可简单的将web框架看做是对前端、数据库的全方位整合2. 手写简易版web框架 服务端import socketserver = socket.socket() ser…

记一次生产事故:一年的数据被删除了

故事开始快要下班了,心情是这样的。 突然电话响了,一看电话号码是项目甲方负责人的号码菊花一紧,难道出什么问题了,硬着头皮接通了电话。@####@,你们程序怎么回事 ,某个业务的数据界面一条都查询不到了。。。。。我们马上排查一下,看看那什么情况(心理活动:尼玛,尼玛…

【Azure App Service】对App Service中CPU指标数据中系统占用部分(System CPU)的解释

问题描述 在使用Azure App Service服务时,对于它的CPU占比,从App Service Plan级别可以查看整个实例(vm)资源的CPU占比,而如果在具体的一个App Service服务中,则只能查看到当前应用所消耗的CPU时间,如果需要计算它的占比:需要使用公式【 CPU Time / (CPU核数 * 60 )】估算…

2024秋季学期 光学期末复习笔记

累了,懒得写文案了参考资料 [1] 赵凯华, 钟锡华. 光学(重排本)[M]. 北京大学出版社, 2017.10. [2] 崔宏滨, 李永平, 康学亮. 光学(第二版)[M]. 科学出版社, 2015.7. [3] 王安廷. 光学课程PPT[Z]. 中国科学技术大学, 2024. 干涉衍射偏振