如何手动终止django rest框架JWT令牌?因为它没有将令牌存储在数据库中。有什么正确的方法使令牌过期吗?
我正在考虑继续使用中间件,其中每个用户都将存储令牌。在每次登录请求时,我们将为用户更新db中的令牌。在每次请求时,我们将从请求中获取令牌,并与存储的令牌进行通信,如果不匹配,我们将返回禁止的令牌。我不知道这是不是正确的方式!
发布于 2019-03-11 12:17:58
不能过期JWT令牌,令牌是自包含的,只有在存储在其有效负载中的时间量之后才能过期。您可以做的是使用刷新和访问令牌,并为访问令牌设置很少的时间。也就是说,当访问令牌过期时,FE应该更新它。应该将刷新令牌存储在数据库中,当需要删除访问令牌时,可以使用刷新令牌阻止用户更新它。
编辑:如果您想在数据库中存储令牌,您可能根本不想使用JWT和无状态授权。相反,坚持基于会话的授权。当您想要过期令牌时,您可以从DB中删除会话。
UPDATE 2:在这种情况下,人们通常所做的是拥有一个具有很少项目的快速访问DB (如redis)。我们没有将jwt令牌存储在数据库中,而是创建了一个包含阻塞令牌的表(我假设已删除令牌的数量将远远少于活动令牌的数量)。但是,现在您牺牲了无状态授权,而是在每次授权用户时检查数据库中是否有令牌。
https://stackoverflow.com/questions/55101650
复制相似问题