7

我正在使用 django 休息框架 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(seconds=300)(5 分钟)。

JWT_REFRESH_EXPIRATION_DELTA

文件:

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

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

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

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

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

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

和 JWT 刷新过期增量?

4

1 回答 1

11

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

可以重复使用令牌进行刷新(token1 -> token2 -> token3),但是这个令牌链将原始令牌(使用用户名/密码凭证获得)的时间存储为 orig_iat。您只能将令牌刷新到 JWT_REFRESH_EXPIRATION_DELTA

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

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

于 2018-05-09T17:14:29.047 回答