首页 > 其他分享 >JWT的失效与续签问题。 。。。。

JWT的失效与续签问题。 。。。。

时间:2024-04-12 11:26:14浏览次数:25  
标签:过期 JWT token 失效 续签 服务端 客户端

jwt

缺陷

token一旦下发便不受服务端控制,如果发生token泄露,服务器也只能任其蹂躏,在其未过期期间不能有任何措施,同时存在以下两个问题:

1、失效问题,因为token是存放在客户端的,服务端无法主动让token失效,比如踢人下线、用户权限发生变化等场景就实现不了

2、续签问题,token 有效期一般都建议设置的不太长, token 过期后用户需要重新登录,导致用户需要频繁登录

如何解决

针对失效问题:

① 将 token 存入内存数据库:将 token 存入 DB 或redis中。如果需要让某个 token 失效就直接从 redis 中删除这个 token 即可。但是,这样会导致每次使用 token 发送请求都要先从redis中查询 token 是否存在的步骤,而且违背了 JWT 的无状态原则,不可取。

② 黑名单机制:使用内存数据库比如 redis 维护一个黑名单,如果想让某个 token 失效的话就直接将这个 token 加入到 黑名单 即可。然后,每次使用 token 进行请求的话都会先判断这个 token 是否存在于黑名单中。

针对续签问题:

① 类似于 Session 认证中的做法: 假设服务端给的 token 有效期设置为30分钟,服务端每次进行校验时,如果发现 token 的有效期马上快过期了,服务端就重新生成 token 给客户端。客户端每次请求都检查新旧token,如果不一致,则更新本地的token。这种做法的问题是仅仅在快过期的时候请求才会更新 token ,对客户端不是很友好。每次请求都返回新 token :这种方案的的思路很简单,但是,很明显,开销会比较大。

② 用户登录返回两个 token :第一个是 acessToken ,它的过期时间比较短,不如1天;另外一个是 refreshToken 它的过期时间更长一点比如为10天。客户端登录后,将 accessToken和refreshToken 保存在客户端本地,每次访问将 accessToken 传给服务端。服务端校验 accessToken 的有效性,如果过期的话,就将 refreshToken 传给服务端。如果 refreshToken 有效,服务端就生成新的 accessToken 给客户端。否则,客户端就重新登录即可。

说明:JWT 最适合的场景是不需要服务端保存用户状态的场景,但是如果考虑到 token 注销和 token 续签的场景话,没有特别好的解决方案,大部分解决方案都给 token 加上了状态,这就有点类似 Session 认证了。

标签:过期,JWT,token,失效,续签,服务端,客户端
From: https://www.cnblogs.com/jj123/p/18130767

相关文章

  • 文件下载时中文文件名乱码及链接失效问题解决
    问题:报错提示11-Apr-202415:38:43.792信息[Catalina-utility-2]org.apache.catalina.startup.HostConfig.deployDirectoryWeb应用程序目录[G:\开发工作用软件\Java开发用\apache-tomcat-10.1.7\webapps\manager]的部署已在[293]毫秒内完成11-Apr-202415:38:44.573信息......
  • 记录一个springcloud-task-core.jar导致CommandLineRunner @order排序失效的问题
    项目中编写了几个CommandLineRunner,并且加上了spring的@order注解,期望在启动时会按顺序执行(从order的value小到大执行),但是实际使用发现排序不生效于是进行debug,CommandLineRunner类的排序是在SpringApplication.class的callRunners方法privatevoidcallRunners(ApplicationCon......
  • 逻辑复制槽失效导致checkpoint卡住
    问题现象先是备份执行pg_basebackup时卡住超时,查看pg_stat_activity中备份进程被checkpoint进程阻塞,然后再检查checkpoint进程发现进程等待事件是IPC:CheckpointStart查看checkpointer进程的pstack:#pstackcheckpointer_pid#可以看到#3行,卡在了删除无效复制槽这一步#00x0......
  • 【JWT】令牌-概述&&基本使用
    目录JWT令牌的使用1.需求2.是什么3.工作流程4.怎么用JWT令牌的使用1.需求​在实现系统登录功能的时候,我们需要实现用户完成一次登录之后,在后续的请求中不再需要反复登录,以前我们经常用到的技术是session即用户发出登录的请求到服务器。验证成功之后,创建sess......
  • Idea 的 Ctrl + Shift + F 快捷键失效
    失效的原因:是因为微软输入法或安装的其他输入法(比如搜狗输入法)的"简繁"切换的快捷键冲突了解决方案:设置搜狗输入法的"简繁"快捷键,把"简繁"快捷键换成其他,不要用Ctrl+Shift+F1、微软输入法:快捷键修改如下(1)右键点击微软输入法进入设置 2、搜狗输入法:快捷键修改......
  • 掌握JWT安全
    确保用户身份验证和保护正在进行的会话是现代网络开发的重要部分。在网络应用程序中管理身份验证和授权的许多选项中,JSONWebTokens(JWT)由于其简单性、高效性和灵活性而变得流行。然而,就像任何其他技术一样,JWT也有其自己的安全考虑。在本文中,我们将探讨如何通过讨论最佳实践来有......
  • CentOS7 虚拟机 ens33网卡失效
    之前虚拟机ssh连接没问题,今天竟然连不上了。打开虚拟机ipa网卡ens33没有iproot@ubuntu:~/Desktop#ipa1:lo:<LOOPBACK,UP,LOWER_UP>mtu65536qdiscnoqueuestateUNKNOWNgroupdefaultqlen1000link/loopback00:00:00:00:00:00brd00:00:00:00:00:00inet1......
  • 6种常见的JWT Attack,绕过网站身份验证 - 3.爆力破解对称式加密签名
    简介JWT攻击是使用者向网站发送修改后的JWT,目标是冒充另一个身份的使用者,并绕过身份验证和存取控制。如果攻击者能够使用任意值创建自己的JWT有效令牌,他们能够升级自己的权限或冒充其他用户,完全控制他们的帐户。JWT常见攻击手法有以下几种:签名未验证JWT无签名爆力破解对称......
  • JWT
    1.概念JSONWebTokens,一种紧凑的Claims声明格式,旨在用于空间受限的环境进行传输,常见的场景如HTTP授权请求头参数和URI查询参数。JWT会把Claims转换成JSON格式,而这个JSON内容将会应用为JWS结构的有效载荷或者应用为JWE结构的(加密处理后的)原始字符串,通过消息认证码(MessageAuthen......
  • jwt实现登录 和 接口实现动态权限
     [Authorize]  ====  usingMicrosoft.AspNetCore.Authorization;   登录的DTOnamespacelogin;publicclassWeatherForecast{publicDateOnlyDate{get;set;}publicintTemperatureC{get;set;}publicintTemperatureF=>32+(in......