JSON Web Token比cookie/session更安全吗?

14

JSON Web Token相比不透明的会话令牌,如何更安全?在这两种情况下,令牌首先发送给客户端,当客户端请求受保护的资源时在服务器上进行验证。


1
你可以查看以下链接:http://cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions - David
1个回答

11

有几个原因人们说JWT更安全。我将列出它们,并给出一些理由,说明这可能并不完全正确,因为存在双向性。

  1. JWT可以使用安全算法(如HS256和RS256)使用密钥进行签名。可以在此处找到全面的列表here。除此之外,您还可以加密JSON Web令牌的有效负载。但是,会话令牌也可以通过顶尖算法安全生成并存储在已签名的cookie中。

  2. JWT可以存储在cookie或Web Storage(本地/会话存储)中。如果您没有将JWT存储在cookie中,则不会容易受到CSRF攻击。您可以决定通过Authorization标头发送他们以供每个HTTP请求使用。不过,还是有一个注意点。JavaScript用于从Web Storage访问JWT,这仍然使您容易受到其他形式的攻击,例如XSS(跨站点脚本)。值得注意的是,处理XSS比处理CSRF更容易。

  3. 在JWT被篡改的情况下,您可以撤销或列入黑名单。这涉及每次想要执行此类操作时调用DB,我不建议您这样做。首选方案是使用短期令牌。

在OAuth的情况下,不透明令牌(也称为承载令牌)是随机字符串,将与到期时间、所请求的作用域(例如访问好友列表)和给予同意的用户一起存储在某种哈希存储中。稍后,当调用API时,将发送此令牌,并且服务器将在哈希表上查找,重新生成上下文以进行授权决策(是否已过期?此令牌是否具有与要访问的API相关联的正确范围?)。不透明令牌和签名令牌(例如JWT)之间的主要区别在于JWT是无状态的。它们不需要存储在哈希表上。

结论

为确保身份验证过程的安全性,签署和加密JWT的库应该是安全的。您还应该使用cookie作为存储机制,而不是将其用于登录。您可以认为使用JWT有更多好处,比如它们更容易扩展,并且可以在OAuth案例中使用,您可以在本文章中找到相关信息。最终,在我看来,无论使用哪种形式的令牌进行身份验证或授权,都要落实开发人员的推理/逻辑以确保正确的步骤被遵循以使应用程序变得安全。在这种情况下,使用案例也非常关键!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接