在HTTP会话中使用JWT或在客户端的请求标头中使用JWT,更安全吗?

时间:2019-03-27 06:03:50

标签: node.js http jwt httpsession express-jwt

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

方法1

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

方法2

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

2 个答案:

答案 0 :(得分:1)

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

  

刷新令牌是长期存在的。这意味着当客户从   服务器上,必须安全地存储此令牌,以防止被他人使用   由于潜在的攻击者使用,因此,存储不安全   它们在浏览器中。如果刷新令牌泄漏,则可以将其用于   获取新的访问令牌(和访问受保护的资源),直到获得   列入黑名单。刷新令牌必须颁发给单个已认证   客户以防止其他方使用泄漏的令牌。访问   令牌也必须保密,但由于其寿命较短,安全性高   注意事项不太重要。

另外,会话可能已被劫持或修复。

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

因此,我将首选本机JWT机制,并会注意客户端上auth令牌的存储。

答案 1 :(得分:0)

这是我的一些澄清,

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