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

use*_*692 5 authentication cookies session http jwt

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

小智 5

人们说JWT更安全有几个原因.我会列出它们,并告诉你为什么那可能不是真的情况,因为它摆动两种方式.

  1. JWT可以使用安全算法(如HS256和RS256)使用密钥进行签名.可在此处找到完整列表.最重要的是,您还可以加密JSON Web令牌的有效负载.但是,会话令牌也可以使用顶级算法安全地生成并存储在已签名的cookie中.

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

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

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

结论

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