JSON Web Token如何比cookie / session更安全?

时间:2016-08-09 13:43:43

标签: http session authentication cookies jwt

如何使用JSON Web令牌比不透明会话令牌更安全,在这两种方案中,令牌首先发送到客户端,然后在客户端请求受保护资源时在服务器上进行验证。

1 个答案:

答案 0 :(得分:5)

人们说JWT更安全有几个原因。我会列出它们,并告诉你为什么情况可能并非如此,因为它会双向摆动。

  1. JWT可以使用安全算法(如HS256和RS256)使用密钥进行签名。可以找到一份综合列表here。最重要的是,您还可以加密JSON Web令牌的有效负载。但是,会话令牌也可以通过一流的算法安全地生成并存储在签名的cookie中。

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

  3. 在您的JWT被篡改的情况下,您可以撤销或将令牌列入黑名单。这涉及每次要执行此类操作时调用DB,我不建议您这样做。首选方案是使用短期令牌。
  4. 在OAuth的情况下,不透明的令牌(也称为承载令牌)是随机字符串,它将存储在服务器上的某种散列存储中,同时存在过期,请求的范围(例如,访问朋友列表)和用户谁同意了。稍后,当调用API时,会发送此令牌并在哈希表上查找服务器,对上下文进行重新水化以做出授权决策(它是否已过期?此令牌是否具有与想要成为的API关联的正确范围?访问?)。不透明令牌和签名令牌(例如JWT)之间的主要区别在于JWT是无状态的。它们不需要存储在哈希表中。

    结论

    用于签署和加密JWT的库应该是安全的,以确保您的身份验证过程也是安全的。您还应该使用cookie作为存储机制,而不是使用它们进行登录。您可以说使用JWT有更多好处,因为它们更易于扩展,并且可以在您可以在此article中找到的OAuth案例中使用。在一天结束时,在我看来,它只是依赖于开发人员的推理/逻辑,以确保遵循正确的步骤来确保应用程序的安全,无论使用何种形式的令牌进行身份验证或授权。用例也是这方面的关键!