当前位置: 首页 > 知识库问答 >
问题:

缓存已验证的JWT令牌可以防止spring boot应用程序中重复验证过程吗

谷梁淇
2023-03-14

我们有一个带有微服务架构的Spring启动应用程序。
我们有一个单独的身份验证服务,它提供了一个用RS256算法签名的JWT令牌。
这个令牌会在客户端到我们主应用程序服务器的每个请求中发送。我有用于验证签名的公钥。
现在这个JWT令牌会在客户端的每个API请求中发送,因为我们的大多数URL都受到保护。

缓存已经验证过的JWT令牌以防止在来自同一用户的每个API调用中重复验证相同令牌的过程是个好主意吗?

共有3个答案

莘俊能
2023-03-14

JWT的主要目的是不具有服务器端状态

这意味着服务器不会存储任何信息,会话也不会存储任何信息。

>

  • 稍后,当您想要扩展应用程序(有多个实例)时,您可能会遇到问题,并且还可能面临一些安全问题

如果坚持使用有状态服务器,那么最好使用像Redis这样的缓存服务器,并注意每行(每个JWT)的存在时间(生存期)必须等于其到期日期。

按照标准,在服务器中缓存JWT不是一个好主意(让服务器有状态不是一个好主意)

云浩然
2023-03-14

您可以缓存JWT令牌,但必须设置缓存超时,该超时应等于令牌超时。

莫飞翮
2023-03-14

缓存令牌验证结果可能有很好的理由。我只会在必要时这样做,因为内存验证很快。

有时,在验证令牌和识别用户之后,您可能希望对角色等进行相当昂贵的查找,但您不希望对每个API请求都这样做

如果缓存,则存储令牌的SHA256哈希-并设置不大于令牌的exp声明的生存时间,如Ankur所示。

我的帖子进一步探讨了这个话题。

API网关解决方案通常使用这种模式。例如,AWS API网关允许您缓存策略文档,当下次接收到相同的令牌时,可以快速查找该文档。

 类似资料:
  • 我在做一个全堆栈的web应用程序。我的前端由angular-cli组成,后端由node+Express构建。

  • 我想为此endpoint创建JUnkt测试: 完整代码:Github JUnit测试: 当我运行代码时,我在这一行得到NPE: 我如何正确地模拟jwtTokenProvider?正如你所见,我有一个包含测试数据的文件,我加载了该文件,但没有提取令牌。你知道我如何解决这个问题吗?

  • 我目前正在使用Vapor开发Swift后端。我的iOS客户端使用新的iOS 13功能“使用Apple登录”。当用户登录时,我会得到一个身份令牌(访问令牌),这是一个由Apple签名的有效JWT令牌。这将在所有正在进行的通信中发送到服务器,以验证服务器提供的某些路由。 在服务器上,我想通过验证令牌签名来验证发送的令牌是否确实由Apple签名,并且不是由某些恶意用户专门创建的。Apple提供了一个HT

  • 我正在制作一个javascript客户端,它使用JWT令牌连接到Api。在服务器端没有问题,我可以创建令牌对其进行签名,然后验证签名,从而确保没有人篡改令牌。 但我如何在客户端做到这一点。我可以解码JWT令牌并查看头、负载和签名。但是如何在客户端验证签名?是否有用于此的库,如何将公钥传输到客户端? 如果我不验证签名,我怎么知道令牌没有被篡改?

  • 使用刷新令牌可以缓解CSRF攻击。第一条规定: 刷新令牌由auth服务器作为HttpOnly cookie发送到客户端,并由浏览器在/refresh_token API调用中自动发送。因为客户端Javascript不能读取或窃取HttpOnly cookie,所以这比将其作为普通cookie或在LocalStorage中持久化要好一些。这种方法也可以免受CSRF攻击,因为即使表单提交攻击可以调用/