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

标签 http session authentication cookies jwt

使用 JSON Web token 如何比不透明 session token 更安全,在这两种情况下, token 首先发送到客户端,然后在客户端请求 protected 资源时在服务器上进行验证。

最佳答案

人们说 JWT 更安全的原因有很多。我将列出它们,并向您说明为什么情况并非如此,因为它是双向摆动的。

  1. 可以使用 HS256 和 RS256 等安全算法的 secret 对 JWT 进行签名。可以找到完整列表here .除此之外,您还可以加密 JSON Web token 的负载。但是,也可以使用一流的算法安全地生成 session token 并将其存储在签名的 cookie 中。

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

  3. 在您的 JWT 被篡改的情况下,您可以撤销 token 或将 token 列入黑名单。这涉及到每次你想执行这种我不建议你做的操作时调用数据库。首选方案是使用短期 token 。

在 OAuth 的情况下,不透明 token (也称为不记名 token )是随机字符串,将与到期时间、请求的范围(例如访问好友列表)和用户一起存储在服务器上的某种哈希存储中谁同意了。稍后,当 API 被调用时,这个 token 被发送并且服务器在哈希表上查找,重新水化上下文以做出授权决定(它是否过期?这个 token 是否具有与想要成为的 API 关联的正确范围访问过?)。不透明 token 和签名 token (例如 JWT)之间的主要区别在于 JWT 是无状态的。它们不需要存储在哈希表中。

结论

用于签署和加密您的 JWT 的库应该是安全的,以确保您的身份验证过程也是安全的。您还应该使用 cookie 作为存储机制,而不是将它们用于登录。您可以争辩说使用 JWT 有更多好处,比如它们更容易扩展,并且可以在 OAuth 案例中使用,您可以在这个 article 中找到这些案例。 .归根结底,在我看来,这完全取决于开发人员的推理/逻辑,以确保遵循正确的步骤来确保应用程序安全,而不管使用何种形式的 token 进行身份验证或授权。在这种情况下,用例也是关键!

关于http - JSON Web Token 如何比 cookie/session 更安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38852510/

相关文章:

c++ - 多个页面的 HTTP 网关

php - 如何在网站的网页之间传递信息

javascript - 如何将用户数据存储到node js express-session中

c# - Asp.Net Core WebApi 的身份验证失败并显示 "Unprotect ticket failed"

http - 为什么 request.getRequestDispatcher 不起作用?

c# - .Net C# TcpClient/Socket HTTP 客户端性能/效率

javascript - 如何处理所有 AJAX 调用的特定 HTTP 错误?

java - Firefox 私有(private)窗口上的 session 无效

php - ejabberd php mysql 外部身份验证失败并终止

http - 为什么 Authentication 的 HTTP header 叫做 Authorization?