首页 > 其他分享 >web应用中身份验证与鉴权:Token无感刷新新方案

web应用中身份验证与鉴权:Token无感刷新新方案

时间:2024-09-16 10:54:30浏览次数:15  
标签:web 请求 过期 身份验证 无感 token 鉴权 客户端

web应用中身份验证与鉴权:Token无感刷新新方案_拦截器

有关Web的安全验证与鉴权,Jwt已然成为我们日常开发中最常用的方案,这里的Web既包括各种Web系统和平台,还有各种对外提供的API服务等等。它们都可以用jwt的方案来对客户端请求进行安全验证。但是一般人都知道,token存在一个过期的问题,它会导致我们正在使用系统的过程中,出现突然中断你的使用,让你去重新登录,使得正在进行或者进行到半途的工作瞬间作废,这真的是很糟糕的体验,于是就有了适当的时候怎么样对过期token进行更新的需要。

web应用中身份验证与鉴权:Token无感刷新新方案_客户端_02

按照以往的传统思路,在请求token的时候返回给客户端两个token,一个是正常鉴权用叫token,另一个是用来刷新token用的叫refreshtoken;一般这个refreshtoken时效性会比鉴权token要长,一旦鉴权token过期,可以用refreshtoken去重新获取新的token。其实这种方案也会有不友好体验的时候,并不能做到真正的无感。比如我前端页面发起一个页面查询,发现token过期,这时就要利用refreshtoken单独请求接口获取新的token,显然此次页面的查询操作就会被中断,可能需要你重新手动点击一次查询操作,这对用户来说,体验上显然是不友好的,虽然这种情况可能不是很频繁。有些人或许会说,我可以在代码里面补充逻辑,遇到这种情况可以再自动发起一次请求,逻辑上看似乎没问题,但是你想想,以后每个客户端请求方法里面都要加这一段判断逻辑,对开发工作而言又是一笔得不偿失的大负担了。

那有没有其他法子,既能解决token过期问题,又不存在丝毫请求卡壳,做到真真正正的无感刷新呢?让我们接着往下看…

新方案的思路和原理其实很简单,在实施过程中只要关注到两点就能做到真真正正的无感刷新,而且这种方案通过扩展还能对token的有效性做到实时控制。

web应用中身份验证与鉴权:Token无感刷新新方案_客户端_03

第一点就是需要我们自己实现一个全局拦截器,在拦截器逻辑中,自己实现token的解析和验证。

第二点就是在解析验证token时,判断这个token距离过期还有多久,比如token的有效期是60分钟,当发现距离过期少于20分钟或者少于10分钟(这个时间长短根据自身需求定),我们就可以在返回请求的头部添加一个新的token给到客户端,客户端在拿到新token后替换掉老token,这样token的有效期就能够持续自动的更新,在我们使用系统过程中,只要中间不出现长时间不用的情况,token会始终有效,用户也不会感觉到任何的卡壳,真正做到了无感刷新。

同时还可以在此方案的基础上,进行适当的扩展,来达到对token有效性的即时控制。比如我禁用了某个用户,那么就可以根据token中的userid立马让这个用户的token失效,真可谓是一举多得的好法子!

标签:web,请求,过期,身份验证,无感,token,鉴权,客户端
From: https://blog.51cto.com/u_13744388/12030181

相关文章

  • WebSocket vs. Server-Sent Events:选择最适合你的实时数据流技术
    引言:在当今这个信息爆炸的时代,用户对于网页应用的实时性要求越来越高。从即时通讯到在线游戏,再到实时数据监控,WebSocket技术因其能够实现浏览器与服务器之间的全双工通信而受到开发者的青睐。WebSocket技术为现代Web应用提供了强大的实时通信能力。虽然它在实现上可能比传统的HTTP......
  • 软件设计之JavaWeb(3)
    软件设计之JavaWeb(3)此篇应在MySQL之后进行学习:路线图推荐:【Java学习路线-极速版】【Java架构师技术图谱】尚硅谷全新JavaWeb教程,企业主流javaweb技术栈资料可以去尚硅谷官网免费领取此章节最好学完JDBC观看学习内容:请求转发与响应重定向路径问题MVC架构模式1、......
  • WEB-API+.NET+CRUD+SSMS(VS2022)
    1.使用VS2022创建一个web-api项目,根目录如下:其中TestCode.cs写model实体类,Controller编写控制器2.实体类Item,编写对应的属性点击查看代码publicclassItem{[Required]publicintId{get;set;}[Required]publicintFieldID{get;set;}......
  • Javaweb之SpringBootWeb案例之阿里云OSS服务入门的详细解析
     2.3.2入门阿里云oss对象存储服务的准备工作我们已经完成了,接下来我们就来完成第二步操作:参照官方所提供的sdk示例来编写入门程序。首先我们需要来打开阿里云OSS的官方文档,在官方文档中找到SDK的示例代码:编辑编辑编辑编辑参照官方提供的SDK,改造一下,即可实现文件上传功能:import......
  • 【webpack4系列】设计可维护的webpack4.x+vue构建配置(终极篇)
    构建配置包设计构建配置管理的可选方案:通过多个配置文件管理不同环境的构建,webpack--config参数进行控制将构建配置设计成一个库,比如:xxx-webpack抽成一个工具进行管理,比如:create-vue-app将所有的配置放在一个文件,通过--env参数控制分支选择通过多个配置文件管理不同......
  • 【webpack4系列】编写可维护的webpack构建配置(四)
    构建配置包设计构建配置管理的可选方案:通过多个配置文件管理不同环境的构建,webpack--config参数进行控制将构建配置设计成一个库,比如:xxx-webpack抽成一个工具进行管理,比如:create-vue-app将所有的配置放在一个文件,通过--env参数控制分支选择通过多个配置文件管理不同......
  • 【webpack4系列】webpack构建速度和体积优化策略(五)
    目录速度分析:使用speed-measure-webpack-plugin体积分析:使用webpack-bundle-analyzer使用高版本的webpack和Node.js多进程/多实例构建资源并行解析可选方案使用HappyPack解析资源使用thread-loader解析资源多进程并行压缩代码方法一:使用parallel-uglify-plugin插件方法......
  • 【webpack4系列】webpack进阶用法(三)
    自动清理构建目录产物webpack4.x使用clean-webpack-plugin@3版本:npmiclean-webpack-plugin@3-Dwebpack配置:const{CleanWebpackPlugin}=require('clean-webpack-plugin')plugins:[newCleanWebpackPlugin(),]PostCSS插件autoprefixer自动补齐CSS3前缀需......
  • 【webpack4系列】webpack初识与构建工具发展(一)
    为什么需要构建工具?转换ES6语法转换JSXCSS前缀补全/预处理器压缩混淆图片压缩前端构建演变之路ant+YUIToolgruntgulp、fis3webpack、rollup、parcel为什么选择webpack?社区⽣态丰富配置灵活和插件化扩展官⽅方更新迭代速度快初识webpack,简单的例子入手......
  • 10个JavaWeb和JavaSE小项目:SSM、SpringBoot。毕设学习好模板。
    本仓列举了15个JavaWeb和JavaSE小项目:有SSM的、SpringBoot+Mybatis的、纯JavaSE+JavaFX的。对初学者非常友好,感兴趣的同学拿去学习。有问题请私信我。汽车租赁管理demo教务信息查询管理demo简易就业信息管理系统简易理财管理系统医院人事管理系统房屋租赁管理dem......