如果我使用基于令牌的身份验证,我还需要会话吗?

时间:2016-09-20 14:14:55

标签: javascript session authentication express jwt

如果我以完全无状态的方式使用基于令牌的身份验证(如JWT)(即在令牌中包含用户ID等内容),那么我是否正确,那么根本不需要会话?

我刚读过这篇文章(Stop using JWT for sessions),不推荐使用JWT替换会话。

1 个答案:

答案 0 :(得分:2)

答案(一如既往):这取决于!

以前的陈述可能是软件开发的唯一规则,其他一切都是指导方针。是的,我夸大了,但我想传达的是你需要把那些文章拿出来。

对于您的问题,更具体的答案是,是的,如果您在JWT中包含您需要的所有内容,则不需要服务器端会话,但如果您在cookie中包含所需的所有内容,情况也是如此。 / p>

在你的位置,我会阅读更多关于该主题的文章,然后考虑手头的具体情况,并决定最适合它的方法。我可以推荐一个有趣的补充阅读,以下博客文章:Cookies vs Tokens: The Definitive Guide

  

TL; DR 基于令牌的身份验证比以往更加重要。我们检查了cookie和基于令牌的身份验证之间的差异和相似之处,使用令牌的优势,以及解决开发人员关于基于令牌的身份验证的常见问题和疑虑。

从摘要中可以看出,它似乎支持基于令牌的身份验证,但这很好,因为它可以让您获得关于该主题的另一个视角。

就个人情况而言,根据具体情况,使用其中任何一种方法都没有问题。

如果我的系统由在单个域中提供的单个甚至多个Web应用程序组成,则使用会话标识符与存储在服务器上的关联会话数据的更传统的实现方式是该死的好选择,让我们明白为什么:

  • 您可以在整个系统中进行单点登录,因为您的会话Cookie可供同一域内的所有应用程序使用。
  • 在服务器上维护会话状态的开销很大,但只要你做得正确,你仍然可以使用该配置进行扩展。
  • 会话标识符很可能比JWT更轻量级,并且对客户端来说是不透明的,因此您不必担心泄漏敏感信息。

但是,如果我有一个多个应用系统分布在不同的域和/或平台(网络,原生移动等),我会给基于令牌的方法提供更多相关性...为什么你问一下,让我们看看:

  • 在这样的系统中,您很可能希望拥有不同客户端应用程序通用的Web API。使用基于令牌的方法设置要保护的API非常容易,因为那里有很多示例代码。
  • 作为多个域和多个平台,我无法通过cookie进行单点登录。
  • 现在您的应用程序有一个通用API,如果您使用的是JWT而不是传统的基于cookie的会话标识符,则可以更轻松地将该API打开到第三方应用程序。