【发布时间】:2017-01-28 12:30:04
【问题描述】:
如果我以完全无状态的方式(即在令牌中包含用户 ID 等内容)使用 JWT 等基于令牌的身份验证,那么我是否完全不需要会话?
刚看了这篇文章(Stop using JWT for sessions),不推荐使用JWT替换session。
【问题讨论】:
标签: javascript session authentication express jwt
如果我以完全无状态的方式(即在令牌中包含用户 ID 等内容)使用 JWT 等基于令牌的身份验证,那么我是否完全不需要会话?
刚看了这篇文章(Stop using JWT for sessions),不推荐使用JWT替换session。
【问题讨论】:
标签: javascript session authentication express jwt
答案(一如既往):视情况而定!
前面的陈述可能是软件开发的唯一规则,其他一切都是指导方针。是的,我在夸大其词,但我想传达的是,您需要对那些文章持保留态度。
对您的问题的更具体答案是,是的,如果您在 JWT 中包含您需要的所有内容,则您不需要服务器端会话,但如果您在 cookie 中包含您需要的所有内容,这也是正确的。
在您的职位上,我会阅读更多关于该主题的文章,然后会考虑手头的具体情况并决定最适合它的方法。我可以推荐以下博客文章作为有趣的补充阅读:Cookies vs Tokens: The Definitive Guide
TL;DR 基于令牌的身份验证比以往任何时候都更加重要。我们研究了 cookie 和基于令牌的身份验证之间的异同、使用令牌的优势,并解决了开发人员对基于令牌的身份验证的常见问题和顾虑。
从摘要中可以看出,它似乎更倾向于基于令牌的身份验证,但这很好,因为它可以让您从另一个角度了解该主题。
就我个人而言,根据场景使用其中任何一种方法都没有问题。
如果我的系统由单个域中可用的单个甚至多个 Web 应用程序组成,则使用会话标识符和存储在服务器上的相关会话数据的更传统的实现是该死的好选择,让我们看看为什么:
但是,如果我有一个跨不同域和/或平台(网络、原生移动设备等)的多个应用程序系统,我会更关注基于令牌的方法......为什么你问,让我们看看:
【讨论】: