DJANGO-GRAPHQL-JWT:我们如何知道刷新令牌发布后的年龄?

Posted

技术标签:

【中文标题】DJANGO-GRAPHQL-JWT:我们如何知道刷新令牌发布后的年龄?【英文标题】:DJANGO-GRAPHQL-JWT: How do we know how old is the refresh token after it has been issued? 【发布时间】:2019-12-03 15:29:18 【问题描述】:

概述

基于长期运行刷新令牌的Settings 部分中的概念。

这意味着您需要每5分钟刷新一次[访问令牌],并且您需要在刷新令牌发出后的7天内更换一次。

这将使用户能够保持刷新令牌会话,只要我们可以在 7 天内刷新它(例如'JWT_REFRESH_EXPIRATION_DELTA': timedelta(days=7))。

请注意,您不能使用过期的刷新令牌调用 refreshToken(refreshToken: $refreshToken),因为这可能会导致 "message": "Refresh token is expired"

问题

现在的难题是我们如何知道刷新令牌将在 7 天后过期?所以我们可以创建一个逻辑来检查会话是否还剩 1 天,然后触发 refreshToken() 突变?

结论

在不知道刷新令牌的到期日期的情况下,开发人员必须在客户端发布刷新令牌后集成存储日期,以确定刷新令牌的使用期限。

如果我遗漏了什么,也许已经有一种简单的方法来处理刷新令牌到期日期的检查?

【问题讨论】:

【参考方案1】:

JWT 令牌实际上是一个 Base64 编码的字符串,其中存储了许多自己的属性,包括您要查找的属性。 JWT 令牌的美妙之处在于它还包含一个哈希,它基于令牌的有用部分。这意味着,如果有人通过更改过期/颁发日期、用户名或自定义值来更改 JWT 令牌,则哈希将不再有效并且令牌将被拒绝。

在您的情况下,这意味着您可以接受令牌,将字符串解码为 JSON 对象,检查其值,并根据其内容做出响应。希望这会有所帮助!

【讨论】:

感谢您的详细回答,我很清楚 JWT 令牌始终可以被解码以查看有效负载详细信息。在那里我们还可以看到令牌的orig_iatexp 等。刷新 access token 非常简单,但这里的问题是 refresh token 不是JWT 是一种 UID,我们无法提取任何信息,它将过期多长时间。希望这能澄清问题并希望您能提供帮助。 根据medium.com/monstar-lab-bangladesh-engineering/…,刷新令牌也应该是可解码的,并且应该由三个部分组成 - 包括到期日期 我们也期待这个。奇怪的是为什么他们使用 UID 来刷新令牌,而不仅仅是使用 JWT。似乎别无选择,只能在请求刷新令牌后将日期存储在客户端。

以上是关于DJANGO-GRAPHQL-JWT:我们如何知道刷新令牌发布后的年龄?的主要内容,如果未能解决你的问题,请参考以下文章

如何结合突变在 django-graphql-jwt 中创建或登录用户?

django-graphql-jwt JWT_COOKIE_SAMESITE 不工作

在 django-graphql-jwt 中使用 @login_required 进行查询/突变会导致 graphql.error.located_error.GraphQLLocatedError

基于类的视图django中的JWT验证

pip - 如何使用预先构建的***而不是再次拉动 git 以避免冲突?

无效的凭据引发身份验证突变异常