不要将 JWT 用于会话管理,第二部分: 为什么你的解决方案无法生效?

原文链接: Stop using JWT for sessions, part 2: Why your solution doesn't work
译者: dreamdevil00

一星期前, 我发布了一片文章 解释为什么你不应当使用 JSON Web Tokens 作为一种会话机制。

糟糕的是,文章还没写完篇幅就达到了上限——Reddit 和 Hacker News 上的许多评论者一遍又一遍地提出同样的“解决方案”,完全忽略了文章本身已经提到了并发现是不切实际的。

因此,这次,我要用一个略带讽刺意味的流程图来说明这一点。

不要将 JWT 用于会话管理,第二部分: 为什么你的解决方案无法生效?_第1张图片
jwt-flowchart.png

脚注: 微服务架构

另一个经常出现的论点是,在微服务架构中,在会话中使用 JWT 仍然很好。这也是错误的,但有点复杂,无法纳入流程图。

在微服务架构中,客户端直接和服务对话,大约有两种类型的服务:

  • 有状态服务: 具有会话或持久化概念,如聊天服务。

  • 无状态服务: 没有会话概念,而是执行独立的自包含任务,比如视频转码服务。

这两种情况下你都不需要使用 JWT 令牌作为会话。对于无状态服务,根本没有会话,因此你只需让应用程序服务器为每个单独的授权操作发出短暂的、单次使用的令牌。

对于有状态服务,你为每个服务分发一个新的短暂的单次使用令牌,然后在服务本身上交换该令牌,用于该特定服务上的会话。你从不使用令牌本身作为会话。

在微服务架构中,客户端只与应用服务器对话,这些都与此无关,因为服务之间没有“会话”的概念-服务是来自同源的单独的、自包含的操作。在那里使用 JWT 令牌可能会很好,即使对于这种情况不是最优的-你只是没有将它们作为会话使用。

你可能感兴趣的:(不要将 JWT 用于会话管理,第二部分: 为什么你的解决方案无法生效?)