【问题标题】:Django rest framework JWT , delete the jwt tokenDjango rest framework JWT ,删除 jwt 令牌
【发布时间】:2019-08-01 18:07:03
【问题描述】:

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

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

【问题讨论】:

标签: django python-3.x django-rest-framework jwt django-rest-framework-jwt


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-06-25
    • 2017-03-30
    • 2017-03-29
    • 2016-08-24
    • 2019-06-20
    • 2019-02-26
    • 1970-01-01
    • 2017-05-28
    • 2021-05-22
    相关资源
    最近更新 更多