【发布时间】:2016-12-15 14:30:09
【问题描述】:
如何使用 JSON Web 令牌比不透明会话令牌更安全?在这两种情况下,令牌首先发送到客户端,然后在客户端请求受保护资源时在服务器上进行验证。
【问题讨论】:
标签: http session authentication cookies jwt
如何使用 JSON Web 令牌比不透明会话令牌更安全?在这两种情况下,令牌首先发送到客户端,然后在客户端请求受保护资源时在服务器上进行验证。
【问题讨论】:
标签: http session authentication cookies jwt
人们说 JWT 更安全有几个原因。我将列出它们,并说明为什么情况并非如此,因为它是双向的。
可以使用带有 HS256 和 RS256 等安全算法的密钥对 JWT 进行签名。可以在here 找到完整的列表。最重要的是,您还可以加密 JSON Web 令牌的有效负载。但是,会话令牌也可以使用一流的算法安全地生成并存储在签名的 cookie 中。
JWT 可以存储在 cookie 或 Web 存储(本地/会话存储)中。如果您没有将 JWT 存储在 cookie 中,那么您就不会受到 CSRF 的攻击。您可以决定通过每个 HTTP 请求的 Authorization 标头发送它们。但是,仍然有一个警告。 Javascript 用于从 Web 存储访问 JWT,这仍然使您容易受到其他形式的攻击,例如 XSS(跨站点脚本)。值得一提的是,处理 XSS 比处理 CSRF 更容易。
在 OAuth 的情况下,不透明令牌(也称为不记名令牌)是随机字符串,将存储在服务器上的某种散列存储中,连同过期、请求的范围(例如访问好友列表)和用户谁同意。稍后,当调用 API 时,发送此令牌,服务器在哈希表上查找,重新合成上下文以做出授权决定(它是否过期?此令牌是否具有与想要成为的 API 关联的正确范围?访问?)。不透明令牌和签名令牌(例如 JWT)之间的主要区别在于 JWT 是无状态的。它们不需要存储在哈希表中。
用于签署和加密 JWT 的库应该是安全的,以确保您的身份验证过程也是安全的。您还应该使用 cookie 作为存储机制,而不是使用它们进行登录。您可以争辩说,使用 JWT 有更多好处,例如它们更容易扩展,并且可以在 OAuth 案例中使用,您可以在 article 中找到这些案例。归根结底,在我看来,这完全取决于开发人员的推理/逻辑,以确保遵循正确的步骤来确保应用程序安全,无论使用何种形式的令牌进行身份验证或授权。在这种情况下,用例也是关键!
【讨论】: