处理被盗的 JWT?



我正在构建一个带有jwt身份验证的nodejs服务器。

目前,我的 jwt 的有效期为 1 个月。 如果用户进入登录页面,我会检查他的请求是否包含有效的 jwt,如果是,他不必输入用户名和密码。 如果他注销,则 jwt 将在客户端删除,因此用户下次必须使用他的凭据登录。

如果攻击者侦听连接(我已经在使用 ssl(并获取令牌怎么办? 即使用户注销并在下一个会话中获取新令牌,攻击者也可以使用旧令牌模拟用户,只要它有效,对吗?

  1. 将用户的"当前"令牌的 IAT 存储在数据库中并将其与请求中令牌的 IAT 进行比较以避免攻击者的访问是否是一个好主意?

  2. 我知道,1 个月对于 jwt 来说是相当长的时间。我还想到了每次客户端登录时生成一个新令牌的想法(经验时间为 2 天(。但是,如果攻击者只获得 1 个有效令牌,他也会获得新令牌,不是吗?

你有什么建议吗?

谢谢,干杯!

您的顾虑正是安全人员建议不要将 JWT 用于会话数据的原因之一 - 请参阅"您不能使单个 JWT 令牌无效"部分。 换句话说,使 JWT 令牌失效的唯一方法是在呈现数据库时强制进行数据库查找 - 但这首先破坏了 JWT 的全部要点(大多数人使用它们,因为他们试图避免在服务器上进行数据库查找(。

将令牌和任何会话数据(例如登录用户的用户 ID(存储在服务器上。这使您可以完全控制数据和会话。它还消除了许多滥用途径(JWT 标准允许(。

执行此操作时,如果您知道令牌被盗,只需在服务器上将其标记为无效,并让您的应用程序忽略它。

实际上,这意味着只需在 cookie 中拥有一个令牌,并将用户 ID 和其他会话数据存储在数据库表或服务器端缓存(例如 mysql 表或 redis 缓存(中。

相关内容

  • 没有找到相关文章

最新更新