JWT(基于令牌的身份验证)与会话/Cookies - 最佳使用
JWT (Token based authentication) vs Session / Cookies - Best Usage
我已经阅读了很多关于这个主题的文章,但找不到我一直在寻找的好的答案。
所以我对JWT vs Session优缺点的理解是
智威汤逊
临
- 更具可扩展性,因为没有数据库在服务器端查找。 (假设无状态 JWT)
控制
- 客户端令牌的存储需要深思熟虑。 (带 httpOnly 的 cookie 优于本地存储,但 cookie 有 4kb 大小限制)
- 不能立即撤销
- 权限可能会过时,直到下一次刷新
会话
临
- 可以说更安全,因为您只传递会话 ID(不透明引用),比 XSS 等更容易防止 CSRF,等等。
- 用户的更改会立即反映出来。
控制
- 可扩展性不如令牌
所以根据我的理解,
支持海量用户(amazon, uber)的网站用什么方法?使用带有分布式缓存的会话是否足够好?
在现实生活中,使用 JWT(基于令牌)比基于会话更有意义的用例是什么?
谢谢!
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 的会话,但是(如任何强烈的意见),这可能会引发讨论 ;)
JWT 的诞生是为了提供从移动应用程序对 API 的安全访问。软件开发人员也开始将它们用于基于 Web 浏览器的客户端,但由于安全问题,它们并不适用。您会发现很多关于该主题的文章。对于web应用来说,token最好保存在服务器端,link与新session一起使用,return登录浏览器后的session保存在session cookie中。
我已经阅读了很多关于这个主题的文章,但找不到我一直在寻找的好的答案。
所以我对JWT vs Session优缺点的理解是
智威汤逊 临
- 更具可扩展性,因为没有数据库在服务器端查找。 (假设无状态 JWT)
控制
- 客户端令牌的存储需要深思熟虑。 (带 httpOnly 的 cookie 优于本地存储,但 cookie 有 4kb 大小限制)
- 不能立即撤销
- 权限可能会过时,直到下一次刷新
会话 临
- 可以说更安全,因为您只传递会话 ID(不透明引用),比 XSS 等更容易防止 CSRF,等等。
- 用户的更改会立即反映出来。
控制
- 可扩展性不如令牌
所以根据我的理解,
支持海量用户(amazon, uber)的网站用什么方法?使用带有分布式缓存的会话是否足够好?
在现实生活中,使用 JWT(基于令牌)比基于会话更有意义的用例是什么?
谢谢!
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 的会话,但是(如任何强烈的意见),这可能会引发讨论 ;)
JWT 的诞生是为了提供从移动应用程序对 API 的安全访问。软件开发人员也开始将它们用于基于 Web 浏览器的客户端,但由于安全问题,它们并不适用。您会发现很多关于该主题的文章。对于web应用来说,token最好保存在服务器端,link与新session一起使用,return登录浏览器后的session保存在session cookie中。