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

时间:2015-12-15 02:22:08

标签: json spring token jwt

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

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

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

总的来说,我对JWT是否可以用来完全替换会话非常困惑?

非常感谢。

1 个答案:

答案 0 :(得分:3)

(这还不是答案。到目前为止我收集的一些信息。我有完全相同的问题。当我彻底解决这个问题时,我会将其改为答案。)

到目前为止,我认为就身份验证而言,JWT可用于替换session + cookie。但是会话不仅仅用于身份验证,它实际上更适用于用户特定的数据存储。鉴于JWT的尺寸限制(如下所述),我不确定JWT是否可以为此目的替换会话。 恕我直言,身份验证恰好是会话的一个用例,因为此类信息必须是特定于用户的。

如果使用JWT代替服务器端会话,您可能会将JWT存储为HTTP标头。更有可能的是,作为Cookie(请参阅here)。但是有一些size limit on the header和4K用于cookie。如果你使用服务器端会话,我不认为存在这样的限制。

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

添加1

以下是一个类似的线程,质疑JWT是否可以完全取代会话存储。 我刚刚在那里添加了一些答案。请看看。

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

ADD 2

如果我们将JWT作为cookie存储为上面的第一个链接,那么它是不是重新实现signed-cookie

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

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