别再使用JWT做会话管理了(二)

一个关于你的 “解决方案” 为什么不适用的简易流程图

我认为可以使用JWT实现Session管理通过以下方式…

微服务架构

另外一个论点是:在微服务架构中使用JWT进行会话仍然很好。

这个也是错误的,但有点太复杂,不适合流程图。

客户端与服务直接对话的微服务架构中,您将拥有大致两种类型的服务:

  • 有状态服务:具有会话或持久性概念的东西,如聊天服务。
  • 无状态服务:没有会话概念的东西,而是执行单独的自包含任务,如视频转码服务。

在任何一种情况下,您都不需要使用JWT令牌作为会话。

对于无状态服务,根本没有会话,因此您只需让应用程序服务器为每个单独的授权操作分发短期的一次性令牌。

对于有状态服务,您为每个服务分发一个新的短期一次性令牌 - 然后在服务本身上进行交换,以进行该特定服务的会话。您永远不会将Token本身用作Session。

在微服务架构中,客户端只与应用服务器通信,这些都不是相关的,因为服务之间没有“Session的概念。所有都是来自相同源的所有单独的、自包含的动作。使用JWT令牌可能很好,即使它们不是这种场景的最佳选择。

不要将JWT用作会话Session。

声明:本文翻译自《Stop using JWT for sessions part 2》,已征得原文作者同意。如有翻译不正确或不合理部分,欢迎指出。