首页 文章

JWT令牌expiration_delta和JWT刷新过期Delta django jwt之间的差异

提问于
浏览
2

我正在使用django rest框架JWT库

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

JWT令牌过期有两种设置

JWT_EXPIRATION_DELTA ,以秒为单位

The docs on it:

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

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

JWT_REFRESH_EXPIRATION_DELTA

Docs:

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

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

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

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

期望不登录,因为令牌将过期,但我已登录 .

那么JWT令牌到期增量之间有什么区别呢?

和JWT刷新过期达美?

1 回答

  • 3

    JWT_EXPIRATION_DELTA 是JWT令牌工作的实际时间 . 在 JWT_EXPIRATION_DELTA 中提及时间后,每当您使用此令牌访问安全 endpoints (启用了JWT Auth)时,它将返回错误消息 Your JWT Token has been expired . 因此,您需要在过期之前保持刷新JWT令牌 . 根据文件:

    可以重复使用令牌刷新(令牌1 - >令牌2 - >令牌3),但此令牌链将原始令牌(使用用户名/密码凭据获取)的时间存储为orig_iat . 您只能将刷新令牌保留至JWT_REFRESH_EXPIRATION_DELTA

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

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

相关问题