Refresh-Token (JWT) 如何避免中间人攻击?

Posted

技术标签:

【中文标题】Refresh-Token (JWT) 如何避免中间人攻击?【英文标题】:How do Refresh-Token (JWT) avoid to man-of-the middle attack? 【发布时间】:2020-05-12 00:39:03 【问题描述】:

我最近使用 DotNet 核心身份实现了 JWT 身份验证。

我知道要减少身份验证的次数以获取 Access-Token(当它在短时间内过期以提高安全性时)我们使用 Refresh-Token 来更新 access-token 而不是重新身份验证。

我认为如果中间人试图窃取 Refresh-Token 以获取新的 Access-Token 并发出请求(劫持令牌),系统如何找到它并拒绝该请求?

我的意思是,如果 JWT 被某人盗用冒充,服务器识别它并拒绝它,是否有解决方案? (我知道 SSL 可以提供帮助,但我正在考虑其他方式。例如,按时间和 Ip 加密 JWT 或 ....?)

【问题讨论】:

【参考方案1】:

假设您在服务器和客户端之间使用两种方式的 SSL,那么您的担忧主要是没有实际意义的。原因是任何中间人,如果他找到拦截的方法,甚至都不知道 JWT 从哪里开始和结束。相反,他只会被一些编码的混乱所困。假设,如果有人持有 JWT,那么是的,他可能能够冒充您的一个用户。这与偷信用卡然后伪装成所有者没有什么不同。但是,由于 SSL,这种情况发生的可能性很小。

【讨论】:

你的意思是不需要担心客户端用户内部的JWT劫持? 当然这是一个问题,因此如果你在谈论一个网站,你不应该将 JWT 存储到 cookie 或本地存储等。但是你强调的问题不仅限于 JWT ,对于所有数据都是一个问题。 @Mohammad 如果您真的担心 JWT 被劫持,请遵循银行和其他类似安全网站使用的模式。他们发出的所有令牌(身份验证和刷新)都非常短暂,最多几分钟。因此,现在即使有人劫持了令牌,他们也必须非常快速地获取和使用它,从而进一步降低您的风险(除了 SSL 已经为您提供的保护之外)。 是的,我想是的,我发现使用 SSL 并减少 Access-Token 的过期时间并将 JWT 存储在浏览器中的安全位置,我们可以将模拟的风险降低到接近 0%。跨度>

以上是关于Refresh-Token (JWT) 如何避免中间人攻击?的主要内容,如果未能解决你的问题,请参考以下文章

jwt令牌的刷新如何在django REST angular中工作

Micronaut 配置未发出 JWT 刷新令牌

检查 cookie 中 JWT 令牌的有效性时如何避免不必要的 API 调用

如何使用基于策略的授权将所需的声明附加到令牌?

如何保护 JWT 令牌以避免将其从一台计算机共享到另一台计算机

使用过期令牌发出同时 API 请求时如何避免多个令牌刷新请求