Django rest framework JWT ,删除 jwt 令牌
Posted
技术标签:
【中文标题】Django rest framework JWT ,删除 jwt 令牌【英文标题】:Django rest framework JWT , delete the jwt token 【发布时间】:2019-08-01 18:07:03 【问题描述】:如何手动使 django rest framework JWT 令牌过期?因为它不将令牌存储在数据库中。有没有正确的方法使令牌过期?
我正在考虑继续使用中间件来为每个用户存储令牌。在每次登录请求时,我们都会为用户更新数据库中的令牌。在每个请求中,我们将从请求中获取令牌并与存储的令牌进行比较,如果不匹配,则我们将返回禁止。我不知道它是否正确!
【问题讨论】:
您希望令牌何时过期?有什么具体的用例吗? 这可能会帮助你***.com/questions/40604877/…。 @NageshDhope,如果用户已经从一台设备登录并且同一用户尝试从新设备登录,那么我想使所有其他设备的令牌过期。 可能重复***.com/a/39971301/6450244 【参考方案1】:您不能使 JWT 令牌过期,该令牌是自包含的,并且只能在其有效负载中存储的时间量之后过期。 您可以做的是同时使用刷新和访问令牌,并为访问令牌设置少量时间。话虽如此,您的 FE 应该在访问令牌过期时更新它。您应该将刷新令牌存储在数据库中,当您需要删除访问令牌时,您可以阻止用户使用刷新令牌更新它。
编辑: 如果您想将令牌存储在数据库中,您可能根本不想使用 JWT 和无状态授权。而是坚持使用基于会话的授权。当您想使令牌过期时 - 您可以从数据库中删除会话。
更新 2: 在这种情况下,人们通常做的是拥有一个快速访问的数据库(如 redis),它的项目很少。我们不是在数据库中存储 jwt 令牌,而是创建一个包含阻塞令牌的表(我假设已删除令牌的数量将远少于活动令牌的数量)。但是,现在您牺牲了无状态授权,转而在每次授权用户时检查令牌是否在数据库中。
【讨论】:
以上是关于Django rest framework JWT ,删除 jwt 令牌的主要内容,如果未能解决你的问题,请参考以下文章
DRF:如何将 django-rest-framework-jwt 集成到 Djoser
Django Rest Framework 中的 JWT 身份验证错误“无效签名”
Django Rest Framework JWT 身份验证测试
Django-Rest-Framework JWT 单元测试说“未提供身份验证”