什么更安全,HTTP会话中的JWT或客户端请求头中的JWT?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么更安全,HTTP会话中的JWT或客户端请求头中的JWT?相关的知识,希望对你有一定的参考价值。

我正在尝试在我的一个项目中实现基于JWT的身份验证系统,并且我在两个选项之间陷入困境,我需要一些澄清。我提出了两种实现JWT的方法,如下所示:

方法1

  • 客户端发送登录凭据
  • 服务器验证凭据
  • 服务器生成两个令牌,auth-token和refresh-token
  • 服务器将这些令牌存储到它的redis-server中,如[key] = refresh-token和[value] = auth-token
  • 由于HTTP连接在客户端和服务器之间始终处于活动状态,因此服务器将auth-token设置为http-sessions并发送刷新令牌作为响应。
  • 客户端将刷新令牌存储到本地浏览器存储中,并在客户端和服务器之间关闭http连接时使用它以重新获得身份验证。
  • 此外,借助refresh-token,我们可以轻松刷新auth-token而无需注销用户。

方法2

  • 客户端发送登录凭据
  • 服务器验证凭据
  • 服务器生成auth-token并发送以响应客户端
  • 客户端在请求标头中为其向服务器发出的每个请求设置令牌
答案

这是一个很好的解释https://auth0.com/learn/refresh-tokens/

刷新令牌是长寿的。这意味着当客户端从服务器获取一个时,必须安全地存储此令牌以防止潜在攻击者使用它,因此,将它们存储在浏览器中是不安全的。如果刷新令牌泄露,它可用于获取新的访问令牌(并访问受保护的资源),直到它被列入黑名单。必须将刷新令牌发布到单个经过身份验证的客户端,以防止其他方使用泄露的令牌。访问令牌也必须保密,但由于其寿命较短,安全考虑因素并不重要。

会话也可能是劫持或固定。

如果您使用SSL,则所有标头都已加密。

所以我更喜欢原生的JWT机制,并且会注意客户端的auth令牌存储。

另一答案

以下是我的一些澄清,

  • 在浏览器端存储长期存在的会话总是有风险的
  • 让服务器执行验证第三方或应用程序发送的令牌的JOB。这样可以确保正在发送的令牌完整且有效。
  • 我更喜欢总是通过HTTPS在标头中发送令牌的方法。这使得简单且更安全,因为服务器将验证您的令牌w.r.t到用户会话。

以上是关于什么更安全,HTTP会话中的JWT或客户端请求头中的JWT?的主要内容,如果未能解决你的问题,请参考以下文章

哪种 JWT 刷新策略更安全?

如何阻止用户使用 JWT 创建自定义 POST 请求?

在客户端应用程序上刷新 JWT 和保护会话

6 Cookies 和Session

什么是JWT令牌认证?

在 HTTP 数据包(Cookie、标头或 JSON)中包含 JWT 令牌的正确方法