JWT(基于令牌的身份验证)与会话/Cookie - 最佳用法

EdH*_*EdH 3 authentication session web-services scalability jwt

我已经阅读了很多关于这个主题的文章,但找不到我正在寻找的好的答案。

所以我对 JWT 与 Session 优缺点的理解是

智威汤逊专业版

  • 更具可扩展性,因为无需在服务器端查找数据库。(假设无状态 JWT)

骗局

  • 客户端令牌的存储需要经过深思熟虑。(带有 httpOnly 的 cookie 优于本地存储,但 cookie 有 4kb 大小限制)
  • 不能立即撤销
  • 权限可能会过时,直到下次刷新

会话专业版

  • 可以说更安全,因为您只传递会话 ID(不透明引用),比 XSS 更容易防范 CSRF 等。
  • 用户的更改会立即反映出来。

骗局

  • 比代币的可扩展性差

所以根据我的理解,

  1. 支持大量用户的网站(亚马逊、Uber)使用哪种方法?使用带有分布式缓存的会话是否足够好?

  2. 现实生活中使用 JWT(基于令牌)比基于会话更有意义的用例是什么?

谢谢你!

Mic*_*ski 9

JWT 从来就不是为处理会话而设计的。它们是在服务之间交换受完整性保护的消息的一种方式。看一下这篇文章:http://cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions/它解释了为什么使用 JWT 来处理会话不是一个好主意。

您还可以阅读有关 BFF 模式的信息:https://curity.io/resources/learn/the-bff-pattern/,其中您使用轻量级后端组件来处理令牌,并且仍然只处理前端中的会话。因为它是一个轻量级组件,所以很容易对其进行缩放 - 例如,它可以是一个 lambda 函数。

因此,在我看来,没有真正好的用例让您真正喜欢基于 JWT 的会话而不是基于 cookie 的会话,但是(正如任何强烈的意见一样),这可能会引发讨论;)

  • 在移动应用程序中,没有真正需要使用 cookie - 您可以安全地处理令牌。尽管如此,cookie 仍可与移动应用程序一起使用 - 我的意思是,对于移动应用程序,Set-Cookie 标头与任何其他响应标头一样。应用程序必须自行解析标头并存储 cookie。它还可以随其请求发送 cookie 标头,没有什么可以阻止这种情况。 (2认同)