我们有一个使用微服务架构的spring-boot应用程序。
我们有一个单独的身份验证服务,它提供了一个用RS256算法签名的JWT令牌。
从客户端到我们的主应用服务器的每个请求中都会发送这个令牌。我有验证签名的公钥。
现在,这个JWT令牌在来自客户端的每个API请求中被发送,因为我们的大多数URL都是受保护的。
缓存已经验证过的JWT令牌,以防止在同一用户的每个API调用中重复验证相同的令牌,这是不是一个好主意?
发布于 2020-01-24 04:00:17
缓存令牌验证结果可能有很好的理由。我只会在必要的时候这样做,因为内存中的验证速度很快。
有时,在验证令牌并标识用户之后,您可能希望执行相当昂贵的角色查找等操作-而且您不希望对每个API请求都执行此操作
如果缓存,那么存储令牌的SHA256散列-并设置一个生存时间不超过令牌的exp声明,如Ankur所示。
我的帖子
进一步探讨此主题。
API网关解决方案经常使用此模式。例如,AWS API Gateway允许您缓存策略文档,下次收到相同令牌时会快速查找该文档。
发布于 2020-01-23 19:56:19
您可以缓存JWT令牌,但必须设置缓存超时,这应该等同于令牌超时。
发布于 2020-01-23 19:55:34
JWT的主要目的是不使用
服务器端状态
这意味着服务器不会存储任何信息,会话也不会。
如果您缓存JWT,那么您的服务器将拥有
状态
..。
- You may have trouble later when you wanna **scale-up** your application(have multiple instances) and you may also face some **security issues**.
如果您坚持使用有状态服务器,那么最好使用Redis这样的缓存服务器,并注意每行(每个JWT)的存在时间(生存期)必须等于其到期日期。
按照标准,在服务器中缓存JWT不是一个好主意(使服务器有状态不是一个好主意)
https://stackoverflow.com/questions/59877621
复制相似问题