【问题标题】:Do i need session store using JSON Web Token tokens ? Why not just using cookies?我需要使用 JSON Web Token 令牌的会话存储吗?为什么不只使用cookies?
【发布时间】:2015-03-11 08:32:22
【问题描述】:

我还是不明白JWT的主要目的是什么。至于我,唯一的目的是:

  • 克服CSRF
  • 并确保更好的移动支持(因为移动应用在某些情况下不支持 cookie)。

还有一种说法是,使用JWT,您不必担心服务器端的会话存储。这对我来说不是很清楚。 JWT 怎么能完全替代服务器端的会话存储呢?这是否意味着我们将所有会话数据放入JWT,对其进行加密并在每次响应时将其发送给客户端?但如果是这样,这是否意味着服务器发出的令牌会根据我们在会话中存储的数据而改变?据我了解,唯一阻止我们以这种方式使用 cookie(在服务器端没有会话存储)是 cookie 文件的大小限制 - 仅限 4kb


我们还需要使用SSL 来防止会话劫持吗? 请告诉我我的理解是否正确或有其他方面。

【问题讨论】:

    标签: session authentication ssl cookies jwt


    【解决方案1】:

    我认为关于智威汤逊的传说太多了。要理解它的本质,我们应该回到它最初的定义。

    根据其official网站:

    JSON Web Token (JWT) 是一个开放标准 (RFC 7519),它定义了 a 用于安全传输信息的紧凑且独立的方式 在各方之间 作为 JSON 对象。这些信息可以被验证和 受信任,因为它经过数字签名。

    所以本质上,JWT 提供的只是a way to transmit data。不多也不少。而且由于涉及多方,因此格式必须标准化。一旦格式标准化,就可以建立库以促进其采用。

    再次来自official 网站:

    什么时候应该使用 JSON Web Tokens?

    在某些情况下 JSON Web Tokens 很有用:

    身份验证:

    这是使用 JWT 的典型场景,一旦用户登录,后续的每个请求都会包含 JWT, 允许用户访问路由、服务和资源 该令牌允许。单点登录是一项广泛应用的功能 现在使用 JWT,因为它的开销小并且能够 易于在不同领域的系统之间使用。

    信息交流:

    JSON Web 令牌是在各方之间安全传输信息的好方法,因为它们可以 签名,例如使用公钥/私钥对,您可以确定 发件人就是他们所说的那个人。此外,作为 签名是使用标头和有效负载计算的,您还可以 确认内容没有改变。

    因此,身份验证只是 JWT 可能的用例之一。虽然它确实是 JWT 的典型用法。

    就身份验证而言,JWT 可以用来代替 session+cookie 的方法,因为它可以节省服务器的内存来存储会话。 但收益有多大取决于用户数量和您的具体场景。如果只有几个客户端,没有跨域认证要求,我认为你不需要放弃旧的 session+cookie 的好方法。

    最后但并非最不重要的一点是,Session 不只是用于身份验证。它实际上是指to place HTTP requests and responses within a larger context。鉴于 JWT 的大小限制,我不确定 JWT 是否可以为此目的替换会话。恕我直言,身份验证恰好是会话的用例之一,因为此类信息必须是特定于用户的。还有许多其他好的场景可以证明会话的合理性,例如购物车。

    【讨论】:

      【解决方案2】:

      JWT 本身只是独立的令牌,不提供 CSRF 保护。用于传递 JWT 的协议可能(或应该)提供防止 CSRF 的方法。

      JWT 比 cookie 明显“更好”的一个领域是它们的跨域能力。您可以在此处阅读有关令牌和 cookie 之间比较的更多信息:https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/

      JWT 可以是独立的,因此它们在可验证的容器中包含您需要的所有信息,这样您就可以在不存储它们(或引用它们)的情况下使用它们。但是会话中可能需要更多数据,因此通常避免会话存储本身并不是迁移到 JWT 的理由。

      需要 SSL 以确保防止令牌泄漏和会话劫持。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-21
        • 2013-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-04
        • 2021-02-22
        • 2017-01-28
        相关资源
        最近更新 更多