当我们有客户端会话时,为啥我们需要 JWT?
Posted
技术标签:
【中文标题】当我们有客户端会话时,为啥我们需要 JWT?【英文标题】:Why do we need JWT when we have client sessions?当我们有客户端会话时,为什么我们需要 JWT? 【发布时间】:2015-07-11 21:56:00 【问题描述】:我了解 JWT 是无状态令牌,用于存储有关客户端声明的签名信息,并通过 Authorization HTTP 标头传递给服务器。
我的问题是,当我们已经拥有客户端会话 (https://github.com/mozilla/node-client-sessions) 时,为什么还需要 JWT?客户端会话在概念上是相同的。它们是包含签名信息的 cookie,经过验证意味着 cookie 没有经过修改。此外,客户端会话存储在 cookie 中并通过 Cookie HTTP 标头传递。只是用不同的词是一样的。我错了吗?
那么,为什么 JWT 还存在呢?我可以理解,也许重点是标准化身份验证令牌的工作方式,但是没有基于会话 ID 的标准,我们相处得很好(每个实现都以自己的方式做事)。另外,为什么 JWT 不使用 cookie 作为传输手段。使用 cookie,您不需要为每个请求显式发送正确的标头(简化 Ajax 请求)。
我错过了什么吗?
【问题讨论】:
【参考方案1】:JWT 令牌是已签名的 JSON 格式文档,用于断言有关用户(或任何委托人)的声明。如果您信任令牌的颁发者,则您信任令牌中的声明,并且可以根据此做出授权决策。
JWT 令牌通常用于调用外部 Web API。这些 API 不一定与您的网站位于同一域中,因此不能使用与您的网站相同的 cookie。 JWT 令牌用于 REST 服务,因为它们不需要存储在服务器上的任何会话信息。使用 JWT 令牌也不易受到CSRF 攻击。
【讨论】:
注意:这里的 Stormpath 人员 (stormpath.com/blog/… ) - 如果存储在 cookie 中,JWT 令牌很容易受到 CSRF 攻击。 当然,如果您将 JWT 存储在 cookie 中并使用它来验证您的 API,那么您将返回隐式验证。 JWT 令牌通常不存储在 cookie 中,而是在Authorization
HTTP 标头中作为不记名令牌发送。另见这篇文章:leastprivilege.com/2015/04/01/…以上是关于当我们有客户端会话时,为啥我们需要 JWT?的主要内容,如果未能解决你的问题,请参考以下文章