【问题标题】:Do I still need sessions if I use token based authentication如果我使用基于令牌的身份验证,我还需要会话吗
【发布时间】:2017-01-28 12:30:04
【问题描述】:

如果我以完全无状态的方式(即在令牌中包含用户 ID 等内容)使用 JWT 等基于令牌的身份验证,那么我是否完全不需要会话?

刚看了这篇文章(Stop using JWT for sessions),不推荐使用JWT替换session。

【问题讨论】:

    标签: javascript session authentication express jwt


    【解决方案1】:

    答案(一如既往):视情况而定!

    前面的陈述可能是软件开发的唯一规则,其他一切都是指导方针。是的,我在夸大其词,但我想传达的是,您需要对那些文章持保留态度。

    对您的问题的更具体答案是,是的,如果您在 JWT 中包含您需要的所有内容,则您不需要服务器端会话,但如果您在 cookie 中包含您需要的所有内容,这也是正确的。

    在您的职位上,我会阅读更多关于该主题的文章,然后会考虑手头的具体情况并决定最适合它的方法。我可以推荐以下博客文章作为有趣的补充阅读:Cookies vs Tokens: The Definitive Guide

    TL;DR 基于令牌的身份验证比以往任何时候都更加重要。我们研究了 cookie 和基于令牌的身份验证之间的异同、使用令牌的优势,并解决了开发人员对基于令牌的身份验证的常见问题和顾虑。

    从摘要中可以看出,它似乎更倾向于基于令牌的身份验证,但这很好,因为它可以让您从另一个角度了解该主题。

    就我个人而言,根据场景使用其中任何一种方法都没有问题。

    如果我的系统由单个域中可用的单个甚至多个 Web 应用程序组成,则使用会话标识符和存储在服务器上的相关会话数据的更传统的实现是该死的好选择,让我们看看为什么:

    • 您可以在整个系统中进行单点登录,因为您的会话 cookie 可供同一域内的所有应用程序使用。
    • 在服务器上维护会话状态会产生开销,但只要操作正确,您仍然可以使用该配置进行扩展。
    • 会话标识符很可能比 JWT 更轻量级,并且对客户端不透明,因此您不必担心泄露敏感信息。

    但是,如果我有一个跨不同域和/或平台(网络、原生移动设备等)的多个应用程序系统,我会更关注基于令牌的方法......为什么你问,让我们看看:

    • 在这样的系统中,您很可能希望拥有一个对不同客户端应用程序通用的 Web API。使用基于令牌的方法设置要保护的 API 非常容易,因为那里有很多示例代码。
    • 作为多个域和多个平台,我无法使用 cookie 进行单点登录。
    • 现在您的应用拥有一个通用 API,如果您使用 JWT 而不是传统的基于 cookie 的会话标识符,那么向第三方应用打开该 API 会容易得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-24
      • 2018-01-08
      • 2021-01-25
      • 2014-02-16
      • 2016-12-18
      • 2020-02-04
      • 1970-01-01
      • 2016-03-09
      相关资源
      最近更新 更多