【问题标题】:Difference between JWT token expiration_delta and JWT Refresh Expiration Delta django jwtJWT token expire_delta 和 JWT Refresh Expiration Delta django jwt 的区别
【发布时间】:2018-10-19 20:53:26
【问题描述】:

我正在使用 django rest frameworks 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,是一个 datetime.timedelta 实例。这是在原始令牌之后多长时间可以刷新未来令牌。

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

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

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

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

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

和 JWT 刷新过期增量?

【问题讨论】:

    标签: django django-rest-framework jwt token django-rest-framework-jwt


    【解决方案1】:

    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 提供了一些现成的端点来验证和刷新令牌),你会发现它不起作用。

    【讨论】:

    • 所以JWT_EXPIRATION_DELTA 是单个令牌在必须刷新之前可以工作的最长时间。其中JWT_REFRESH_EXPIRATION_DELTA 是从初始创建令牌(用户使用用户登录并通过)可以刷新令牌的最大次数,这意味着在JWT_REFRESH_EXPIRATION_DELTA 通过之后,用户存储的令牌将不起作用,他们将必须重新登录。
    • 是的,这就是摘要。
    猜你喜欢
    • 2021-04-28
    • 2017-03-15
    • 2018-02-07
    • 2017-01-09
    • 2021-07-16
    • 2015-02-03
    • 2019-08-02
    • 2020-05-12
    • 2020-08-15
    相关资源
    最近更新 更多