使用 JWT 防止重放攻击

信息安全 验证 jwt json 重放检测
2021-08-28 21:00:22

我目前正在构建一个将用于 Web 和移动应用程序的 RESTful API。将使用JSON Web Tokens对 API 进行身份验证

使用 JWT 时,我们可以使用exp声明在特定时间后使令牌过期。这与jti声明相结合对于防止重放攻击以及将内置到我们的应用程序中的东西很有用。但是,为了方便用户,我们不想在每次请求时或在 30 分钟的短时间间隔后一直要求他们登录。

所以,我在考虑以下情况:

  • 用户使用他们的电子邮件地址和密码登录
  • 服务器在 1 小时内发回过期的 JWT
  • 客户端向 API 发出另一个请求,在标头中传递 JWT
  • 如果 JWT 有效,API 会发回请求的数据,以及另一个JWT,它会在 1 小时后再次过期

如果客户端在分配的 1 小时到期时间内没有发出任何进一步的请求,则后续请求将要求他们再次登录。

我的问题:这是在可用性和防止重放攻击之间权衡的最佳解决方案吗?

1个回答

我认为你需要分开你的担忧。在客户端保护 JWT 是应用程序使用 JWT 的工作,而不是 API。如果这条线模糊不清,您可能需要重新设计您的应用程序,因为它可能更加单一,而不是服务驱动。

JTI、EXP 和 IAT 的设计目的更多是为您提供工具,以在受到攻击时减轻攻击。TLS 用于防止在传输过程中窥探 JWT。缩短 EXP 的窗口会限制单个令牌的曝光,但最终如果他们通过应用程序获得令牌,则 EXP 是静音的,他们只会抓取下一个令牌。