4

如何手动使 django rest 框架 JWT 令牌过期?因为它不将令牌存储在数据库中。有没有正确的方法使令牌过期?

我正在考虑继续使用中间件,每个用户都将存储令牌。在每次登录请求时,我们都会为用户更新数据库中的令牌。在每个请求中,我们将从请求中获取令牌并与存储的令牌进行比较,如果不匹配,则我们将返回禁止。我不知道它是否正确!

4

1 回答 1

2

您不能使 JWT 令牌过期,该令牌是自包含的,并且只能在其有效负载中存储的时间量之后过期。您可以做的是同时使用刷新和访问令牌,并为访问令牌设置少量时间。话虽如此,您的 FE 应该在访问令牌过期时更新它。您应该将刷新令牌存储在数据库中,当您需要删除访问令牌时,您可以阻止用户使用刷新令牌更新它。

编辑:如果您想将令牌存储在数据库中,您可能根本不想使用 JWT 和无状态授权。而是坚持使用基于会话的授权。当您想使令牌过期时 - 您可以从数据库中删除会话。

更新 2:人们在这种情况下通常做的是拥有一个快速访问的数据库(如 redis),它的项目很少。我们不是在数据库中存储 jwt 令牌,而是创建一个包含阻塞令牌的表(我假设已删除令牌的数量将远少于活动令牌的数量)。但是,现在您牺牲了无状态授权,转而在每次授权用户时检查令牌是否在数据库中。

于 2019-03-11T12:17:58.307 回答