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

问题描述 投票:0回答:2

我正在尝试在我的一个项目中实现基于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并发送以响应客户端
  • 客户端在请求标头中为其向服务器发出的每个请求设置令牌
node.js http jwt httpsession express-jwt
2个回答
1
投票

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

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

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

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

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


0
投票

以下是我的一些澄清,

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