为什么JWT要结合Redis使用

2023-09-15 17:41:09

JWT解决了什么问题

存储token的情况:校验token需要重复调用数据库耗时的问题

JWT本身缺陷

  1. alg不要指定为none
  2. 算法不要指定数组,只使用一种算法
  3. 令牌长度可能会超过允许的URL长度,和cookie长度
  4. 如果需要跟踪用于速率限制和 IP 白名单的 API这些功能,那么使用无状态是不现实的

以上都是容易避免的问题,JWT 最大的问题是令牌撤销问题。因为它
在过期前一直有效,因此服务器没有简单的方法来撤销它。

以下是一些可能导致令牌撤销问题的案例:

  1. 注销并不是真正注销。想象一下,你在发送完推文后注销了 Twitter。你会认为自己 注销了服务器,但事实并非如此,因为 JWT 是自包含的,在过期前都将继续工作。过期。过期时间可能是 5 分钟或 30 分钟,也可能是令牌中设定的任何时间。因此,如果有人 可以继续使用它进行身份验证,直到过期为止。
  2. 阻止用户不会立即阻止他们。想象一下,你是 Twitter 或某些在线实时游戏的版主,在这些游戏中,真实用户正在使用系统。游戏的版主,真实用户正在使用该系统。作为版主,您想快速阻止某人滥用系统。系统。出于同样的原因,你不能这样做。即使你阻止了他们,该用户仍可继续访问服务器,直到令牌过期。
  3. JWT 可能包含过期数据。比如,用户是管理员,却被降级为权限较少的普通用户。同样,这不会立即生效,用户将继续是管理员,直到令牌过期。
  4. JWT 通常没有加密。正因为如此,任何能够执行中间人攻击并嗅探 JWT 的人 现在就能获得你的身份验证凭据。由于中间人攻击只需在服务器和客户端之间的连接上完成,因此这变得更加容易。因为 MITM 攻击只需在服务器和客户端之间的连接上完成。有一种加密 JWT 令牌的方法叫 JWE,但使用这种方法时,客户端(尤其是浏览器和 移动设备)无法对其解密,也就无法看到实际的有效负载。此时,您基本上是将 JWT 作为普通的加密会话令牌–至少从网络应用程序和移动应用程序的角度来看是这样。

使用Redis规避JWT的缺陷

就需要结合Redis使用,既解决了数据库来回请求慢(Redis快)的问题,又解决了JWT令牌撤销问题。

Redis + JWT消除了之前讨论过的大部分安全问题(中间人攻击除外)。可以 可以使用 JWT 作为初步检查,同时使用Redis 作为辅助检查(只是判断token是否存在)。

在这种情况下,如果 JWT 校验成功,服务器仍会转到 Redis对信息进行双重检查。如果JWT 验证本身失败,就不必担心检查 Redis 数据库。
这种方法的另一个好处是,你可以在前台使用前端和后端现有的 JWT 库而不必开发自己的自定义方式将数据存储在 Redis 中(尽管这并不是什么大问题)。

最后需要注意的一点是,如上所述、 这种设置仍会使应用程序受到潜在的 中间人攻击。因为令牌没有加密。

如前所述,有一种对 JWT 令牌进行加密的方法叫做 JWE,但使用这种方法时,客户端 (尤其是浏览器和移动设备)无法解密来查看实际有效负载。此时您基本上是将 JWT 用作普通的加密会话令牌,至少从网络应用程序和移动应用程序的角度来看。

如果您要将它用于机器对机器通信,比如在微服务中要在两个不同的服务之间共享登录信息时,就可以共享公钥来解密和查看 JWT 数据–但这是不同的用例。

更多推荐

Docker 安装

Docker官网:Docker:AcceleratedContainerApplicationDevelopmentDockerHub官网:https://hub.docker.com/前提说明CentOSDocker安装前提条件目前,CentOS仅发行版本中的内核支持Docker。Docker运行在CentOS7(6

蒙特卡洛树搜索(MCTS)在Python中实现井字游戏策略优化详细教程

1.介绍井字游戏(TicTacToe)是大家都很熟悉的一款策略游戏,两个玩家轮流在3x3的棋盘上放置自己的标记(通常是’X’和’O’),目标是在任意方向上(横、竖、斜)连续三个自己的标记。而蒙特卡洛树搜索(MCTS)则是一种广泛用于复杂策略游戏(例如围棋、象棋等)的算法。在本文中,我们将结合这两者,使用MCTS为井字游

iOS系统下轻松构建自动化数据收集流程

目录python的优势ShortcutsApp介绍如何结合Python与ShortcutAppiOS系统下轻松构建自动化数据收集流程总结在当今的数字化时代,数据已经成为企业成功的关键因素之一。然而,随着业务的发展和数据量的增加,手动收集和分析数据的方式已经不再可行。在iOS系统下,我们可以利用一些工具和技术来轻松构建自

Guava精讲(三)-Caches,同步DB数据到缓存

在开发中,我们经常需要从数据库中读取数据并进行频繁的读取操作。缓存在各种场景中都有运用,例如,当一个值的计算或检索成本很高,而且在某个输入中需要多次使用该值时,就应该考虑使用缓存,因此将数据缓存在内存中可以显著提高应用程序的性能。问题描述假设我们正在开发一个电子商务网站,需要频繁地显示商品信息。商品信息存储在数据库中,

SpringMVC之JSON返回&异常处理机制

json处理统一异常处理1.json处理//pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-in

服务器搭建(TCP套接字)-select版(服务端)

一、select头文件#include<sys/select.h>二、select原型intselect(intnfds,fd_set*readfds,fd_set*writefds,fd_set*exceptfds,structtimeval*timeout);select()是一个系统调用函数,用于在多个文件描述符

K8S架构原理

目录一、k8s概述1、什么是k8s?2、特性3、主要功能二、集群架构与组件1.Master组件(1)Kube-apiserver(2)Kube-controller-manager(3)Kube-scheduler调度算法:2.配置存储中心3.Node组件(1)Kubelet(2)Kube-Proxy(3)docker

【SpringMVC】之自定义注解

文章目录一、Java注解1.1简介1.2分类1.2.1JDK基本注解1.2.2JDK元注解1.3自定义注解二、使用自定义注解2.1案例一(获取类与方法上的注解值)2.2案例二(获取类属性上的注解属性值)2.3案例三(获取参数修饰注解对应的属性值)三、Aop自定义注解的应用一、Java注解1.1简介Java注解是附加在代

[论文阅读]Coordinate Attention for Efficient Mobile Network Design

摘要最近关于移动网络设计的研究已经证明了通道注意力(例如,theSqueeze-and-Excitationattention)对于提高模型的性能有显著的效果,但它们通常忽略了位置信息,而位置信息对于生成空间选择性注意图非常重要。在本文中,我们提出了一种新的移动网络注意力机制,将位置信息嵌入到通道注意力中,我们称之为“

【论文笔记】Baidu Apollo EM Motion Planner

文章目录AbstractI.INTRODUCTIONA.MultilaneStrategyB.Path-SpeedIterativeAlgorithmC.DecisionsandTrafficRegulationsII.EMPLANNERFRAMEWORKWITHMULTILANESTRATEGYIII.EMPLANN

nginx知识点详解:反向代理+负载均衡+动静分离+高可用集群

一、nginx基本概念1.nginx是什么,做什么事情?Nginx是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强。Nginx转为性能优化而开发,能经受高负载考验。支持热部署,启动容易,运行时间长。2.反向代理正向代理:在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问。反向代理:客户端

热文推荐