JWT token expiration_delta 和 JWT Refresh Expiration Delta 之间的区别 django jwt

Difference between JWT token expiration_delta and JWT Refresh Expiration Delta django jwt

我正在使用 django rest 框架 JWT 库

http://getblimp.github.io/django-rest-framework-jwt/

JWT 令牌过期有两种设置

JWT_EXPIRATION_DELTA 以秒为单位

上面的文档:

您可以通过将 JWT_VERIFY_EXPIRATION 设置为 False 来关闭过期时间验证。如果没有过期验证,JWT 将永远存在,这意味着攻击者可以无限期地使用泄露的令牌。 这是 Python 的 datetime.timedelta 的实例。这将添加到 datetime.utcnow() 以设置到期时间。

默认值为 datetime.timedelta(秒=300)(5 分钟)。

JWT_REFRESH_EXPIRATION_DELTA

文档:

令牌刷新,是一个 datetime.timedelta 实例。这是在原始令牌之后可以刷新未来令牌的时间。

默认值为 datetime.timedelta(days=7)(7 天)。

我不确定不同的用例。我将 jwt 令牌过期增量设置为 20 秒。

然后得到一个令牌将其保存到本地等待 20 秒关闭我的浏览器window 并重新导航到该站点

预计不会登录,因为令牌会过期但我已登录。

那么 JWT 令牌过期增量有什么区别

和 JWT 刷新过期增量?

JWT_EXPIRATION_DELTA 是您的 JWT 令牌生效的实际时间。在 JWT_EXPIRATION_DELTA 中提到的时间之后,无论何时您将使用此令牌访问安全端点(启用了 JWT 身份验证),它都会 return 一条错误消息 Your JWT Token has been expired。因此,您需要在 JWT Token 过期之前不断刷新它。根据文档:

Refresh with tokens can be repeated (token1 -> token2 -> token3), but this chain of token stores the time that the original token (obtained with username/password credentials), as orig_iat. You can only keep refreshing tokens up to JWT_REFRESH_EXPIRATION_DELTA

这意味着无论您刷新令牌多少次,它都会始终记录您第一次生成令牌的原始时间(第一次登录用户)。因此,如果 JWT_REFRESH_EXPIRATION_DELTA 设置为 1 天,您将无法在生成原始令牌后的 1 天后继续刷新 JWT 令牌(意味着您的第一个令牌生成时间)。

不知道您使用什么机制在前端检查用户是否已通过身份验证。但是如果你在后端使用它来检查它(DRF-JWT 提供了一些现成的端点来验证和刷新令牌),你会发现它不起作用。