保护 JWT 的最佳方法是啥?

Posted

技术标签:

【中文标题】保护 JWT 的最佳方法是啥?【英文标题】:What is the best approach to secure JWTs?保护 JWT 的最佳方法是什么? 【发布时间】:2020-09-26 14:18:16 【问题描述】:

如果令牌被泄露,您无能为力。除非令牌过期,否则用户可以访问所有内容。我正在考虑一种可能提供额外安全层的方法,但不确定?

如果我们在负载中添加一个 IP 地址,并在服务器上从请求标头中进行比较呢?

假设我的有效载荷对象看起来像 -


  user_id: 'xyz',
  email: 'john@doe.com',
  user_ip: '89.102.22.95'

在服务器上,我们将比较保存在负载中的 IP 和发出请求的 IP。

if (user_ip == req.connection.remoteAddress) 
  /* It's a valid request */
 else  
  /* Verify Identify using an email confirmation */ 

这基本上是说,即使令牌已被泄露,我们也会有一个额外的安全层,它将与生成令牌的 IP 和发出请求的 IP 相匹配。

这是一个很好的解决方案,让它更安全吗?

【问题讨论】:

【参考方案1】:

我认为这不是一个好的解决方案,因为用户可能会在 wifi / 移动网络之间切换,这也会改变他们的 IP 地址。

我能想到的更好的方法是将用户使用的所有 IP 地址存储在单独的表中。对于每个请求,我们都会检查用户的“白名单”中是否有该 IP 地址(看起来 Steam 和 Parsec 使用这种方法)。

【讨论】:

那么 jwt 的目的是什么?您可以只使用普通会话,这样会更安全。 是的,我也同意普通会话更安全,尽管它需要更多的工作。无论哪种方式,最好有一个缓存层,因为这种方法会给数据库带来更大的压力。

以上是关于保护 JWT 的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

保护 Spring Cloud 配置的最佳方法是啥?

在不使用表单的情况下,从 javascript 应用程序从节点服务器获取 JWT 令牌的最佳安全方法是啥?

保护 REST API 的最佳方式是啥? [关闭]

在 .NET Core 2 Web Api 中验证 JWT 后获取用户数据的最佳做法是啥?

Spring Boot 中 JWT 的最佳实践是啥?

在没有数据库或用户名的情况下使用 php 密码保护文件夹/页面的最佳方法是啥