保护 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 的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
在不使用表单的情况下,从 javascript 应用程序从节点服务器获取 JWT 令牌的最佳安全方法是啥?