JWT(json web token) 能完全取代 Session 吗?

Could JWT(json web token) totally replace Session?

我知道 JWT 可以用来替代基于 cookie/session 的身份验证,我们在之前的项目中使用了它,我知道使用 JWT 有很多好处,例如无状态、CDN 支持、避免 csrf 攻击,更好地支持集群 ENV 等

但是,我很疑惑JWT是否可以完全替代Session?如果我们想充分利用 JWT 来保留所有会话状态,那么这意味着任何时候服务器后端想要将任何状态添加到会话中,而不是这样做,服务器端必须使用该信息和客户端重新生成一个新令牌一方必须更新新生成的令牌,我怀疑这是否正确?

如果我们仅利用 JWT 来支持身份验证并仅保留用户凭据信息,尽管身份验证服务可以作为独立的微服务解耦,但如果我们将会话作为业务服务后端仍然是必需的想保留一些会话状态,对吗?在阅读 spring 文档时,建议利用 Redis 保存会话状态以支持集群环境。

总的来说,我很困惑 JWT 是否可以用来完全取代会话?

非常感谢。

(这还不是答案,只是目前收集到的一些信息。我也有完全相同的问题,等我彻底解决这个问题后,我会把它改成答案。)

到目前为止,我认为在认证方面可以使用JWT来代替session+cookie。但是session不仅仅是用来认证的,它其实更多的是用来一个user-specific数据存储。考虑到 JWT 的大小限制(如下所述),我不确定 JWT 是否可以为此目的替换 session 。 恕我直言,身份验证恰好是 session 的用例之一,因为此类信息必须是 user-specific.

如果您使用 JWT 代替服务器端 session,您可能会将 JWT 存储为 HTTP header。更可能的是,作为 Cookie(参见 here). But there's some size limit on the header 和 4K 的 cookie。如果你使用服务器端 session,我认为不存在这样的限制。

并且这个 article 列出了 JWT 的一些注意事项。

添加 1

下面是一个类似的帖子,质疑 JWT 是否可以完全取代 session 存储。 我刚刚在那里添加了一些答案。请务必看一看

Do i need session store using JSON Web Token tokens ? Why not just using cookies?

添加 2

如果我们像我上面的第一个 link 那样将 JWT 存储为 cookie,它不就是 signed-cookie 的 re-implementation 吗?

答案在这里:Shall we store JWT as a cookie?

还有我的另一个问题:Token based authentication and scalability? An illusion?