JWT令牌的expiration_delta和JWT刷新令牌的Expiration Delta之间的区别是什么?(涉及到IT技术,具体为Django JWT)

8

我正在使用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

官方文档解释:

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

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

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

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

原本期望因为令牌已过期而无法登录,但我却成功登录了。

那么JWT令牌到期时间和JWT刷新到期时间有什么区别呢?

1个回答

13

JWT_EXPIRATION_DELTA 是你的 JWT token 实际有效期。在 JWT_EXPIRATION_DELTA 中设置的时间之后,当你使用此 token 访问启用了 JWT Auth 的安全端点时,它将返回一个错误信息,表明 Your JWT Token has been expired。所以在它过期之前,你需要不断刷新 JWT Token。根据文档:

使用令牌进行刷新可以重复进行(token1 -> token2 -> token3),但是此令牌链保存原始令牌(使用用户名/密码凭证获取)的 orig_iat 时间。您只能继续刷新 JWT_REFRESH_EXPIRATION_DELTA 到期前的令牌。

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

我不知道您在前端使用何种机制来检查用户是否已通过身份验证。但是如果您在后端进行检查(DRF-JWT 提供了一些准备好的端点来验证和刷新 token),则会发现它将无法工作。


2
JWT_EXPIRATION_DELTA 是单个令牌在必须刷新之前可以使用的最长时间。而 JWT_REFRESH_EXPIRATION_DELTA 是令牌自初始创建(用户使用用户名和密码登录)以来可以刷新的最长时间。这意味着在 JWT_REFRESH_EXPIRATION_DELTA 过期后,用户存储的令牌将无法使用,他们将不得不重新登录。 - user9487981
1
是的,那基本上就是摘要。 - SK. Fazlee Rabby

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接