session - 当我们有客户端 session 时,为什么需要 JWT?

标签 session cookies session-cookies jwt json-web-token

据我所知,JWT 是无状态 token ,它存储有关客户端声明的签名信息,并通过授权 HTTP header 传递到服务器。

我的问题是,当我们已经有了客户端 session ( https://github.com/mozilla/node-client-sessions )时,为什么还需要 JWT?客户端 session 在概念上是相同的。它们是包含签名信息的 cookie,经过验证后意味着 cookie 尚未被篡改。此外,客户端 session 存储在 cookie 中并通过 Cookie HTTP header 传递。这是同一件事,只是用不同的词。我错了吗?

那么,为什么 JWT 还在呢?我可以理解,也许重点是标准化身份验证 token 的工作方式,但我们在没有基于 session ID 的标准的情况下相处得很好(每个实现都按照自己的方式行事)。另外,为什么 JWT 不使用 cookie 作为传输手段。使用 cookie,您不需要为每个请求显式发送正确的 header (简化 Ajax 请求)。

我错过了什么吗?

最佳答案

JWT token 是经过签名的 JSON 格式文档,用于声明有关用户(或任何主体)的声明。如果您信任 token 的发行者,您就信任 token 中的声明,并可以据此做出授权决策。

JWT token 通常用于调用外部 Web API。这些 API 不一定与您的网站位于同一域中,因此不能使用与您的网站相同的 cookie。 JWT token 用于 REST 服务,因为它们不需要在服务器上存储任何 session 信息。使用 JWT token 也不易受到 CSRF 的影响。攻击。

关于session - 当我们有客户端 session 时,为什么需要 JWT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29997520/

相关文章:

javascript - 使 angular2-cookie 安全并加密

java - 无法在 Selenium Webdriver 中设置 cookie

php - 如何在 Laravel 5.1 中实现 'remember me'?

javascript - 在本地运行时从不同域删除 cookie

security - 仅用于登录页面的 HTTPS - 是否推荐?

java - 服务程序 : weird cookie string

android - Facebook SDK 3.0 : Unable to call openForPublish after the during a session state CLOSED_LOGIN_FAILED

c# - 检查 session 变量(是否为 null)导致 Handler 类中出现异常

java - Application Server 如何从存储中删除无效或不活动的 session ?

java - 应用程序中多个生命周期极短的 session 属性