【问题标题】:Could JWT(json web token) totally replace Session?JWT(json web token) 可以完全取代 Session 吗?
【发布时间】:2016-03-20 16:50:58
【问题描述】:

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

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

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

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

非常感谢。

【问题讨论】:

    标签: json spring token jwt


    【解决方案1】:

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

    到目前为止,我认为就身份验证而言,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?

    添加 2 个

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

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

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

    【讨论】:

    • @mailme365 我更新了我的回复。现在看起来更像是一个答案。
    • 非常感谢您的详细回答,JWT 无法完全替代 session,所以 JWT 的很多优点(如 CDN、无状态等)仅适用于身份验证服务器,不适用于业务服务器,除非我们按照 Spring 的推荐使用 Redis 来保存会话数据。这意味着如果我们将身份验证功能和业务功能结合到同一个 tomcat 应用程序中,我们仍然会使用 Session,在这种情况下我没有看到使用 JWT 的明显好处,唯一的好处可能是避免 csrf 攻击。
    • @mailme365 感谢您的总结。我也这么认为。
    猜你喜欢
    • 2016-12-15
    • 1970-01-01
    • 2017-10-28
    • 2023-03-18
    • 2016-03-18
    • 1970-01-01
    • 2022-01-13
    • 2014-07-11
    • 1970-01-01
    相关资源
    最近更新 更多