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



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

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

  1. jwt可以使用HS256和RS256等安全算法的秘密签名。一个全面的列表可以在这里找到。除此之外,还可以加密JSON Web令牌的有效负载。然而,会话令牌也可以用一流的算法安全地生成,并存储在签名的cookie中。

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

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

在OAuth的情况下,不透明令牌(也称为承载令牌)是随机字符串,将存储在服务器上的某种散列存储中,以及过期,请求的范围(例如访问好友列表)和同意的用户。稍后,当调用API时,发送这个令牌,服务器查找哈希表,重新定义上下文以做出授权决策(它过期了吗?这个令牌是否具有与要访问的API相关联的正确作用域?)。不透明令牌和有符号令牌之间的主要区别是:即JWT是无状态的。它们不需要存储在哈希表中。

结论

用于签名和加密jwt的库应该是安全的,以确保您的身份验证过程也是安全的。您还应该使用cookie作为存储机制,而不是将其用于登录。您可以争辩说,使用jwt有更多的好处,比如它们更容易扩展,并且可以在本文中找到的OAuth案例中使用它们。在一天结束时,在我看来,这只是取决于开发者的推理/逻辑,以确保遵循正确的步骤,使应用程序安全,无论使用何种形式的令牌进行身份验证或授权。在这种情况下,用例也是关键!

最新更新