Django Rest Framework JWT:如何在登录时更改令牌到期时间
我使用Django REST框架JWT Auth进行会话创建和权限,唯一的问题是:登录时以及令牌过期后,除非再次登录,否则我无法继续执行所需的操作。而且我
。
因此,谁能解释一种动态创建(和刷新)令牌(遵循最佳实践)的方法,以便在登录后继续进行操作。
PS:我在前端使用angular 2,并将令牌插入Http request标头中。谢谢。
回答:
JWT令牌刷新有些混乱,我希望这个解释能对您有所帮助。
- 令牌有
issued at
时间(iat
在令牌中) - 令牌具有
expiration date
(例如now()+ 1小时) - 令牌不能更改。服务器只能发出一个 一个
iat
永远不会改变,但expires
不 改变每个刷新
当您想要扩展令牌时,将发生以下情况:
- 您将您
token
的邮件发送到服务器端点/.../refresh/
- 服务器检查其未过期:
now() <= token.iat + JWT_REFRESH_EXPIRATION_DELTA
- :
- 发出 令牌(在json正文中返回,与login相同)
- 新令牌适用于
now() + JWT_EXPIRATION_DELTA
issued at
令牌 中 的值 不变- App现在有2个令牌(技术上)。
- 应用会丢弃旧令牌并开始发送新令牌
- : 返回错误消息和400状态
例
你有EXPIRATION=1 hour
一个REFRESH_DELTA=2 days
。登录时,您会得到一个令牌,上面写着“ created-
at:Jun-02-6pm”。您可以刷新此令牌(或通过刷新 创建的 令牌)2天。这意味着,对于该登录,您 无需
重新登录即可使用令牌的最长时间为2天零1小时。您可以每1秒钟刷新一次,但是2天后服务器将完全停止允许刷新,并为您提供1小时有效的最终令牌。(头疼)。
设定值
您必须JWT_AUTH
在django设置文件中的设置的后端中启用此功能。我相信默认情况下它是关闭的。这是我使用的设置:
JWT_AUTH = { # how long the original token is valid for
'JWT_EXPIRATION_DELTA': datetime.timedelta(days=2),
# allow refreshing of tokens
'JWT_ALLOW_REFRESH': True,
# this is the maximum time AFTER the token was issued that
# it can be refreshed. exprired tokens can't be refreshed.
'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7),
}
然后,您可以调用JWT刷新视图,将您的令牌传递到正文中(作为json)并获取新的令牌。有关详细信息,请参见http://getblimp.github.io/django-
rest-framework-jwt/#refresh-token中的文档
$ http post localhost:8000/auth/jwt/refresh/ --json token=$TOKEN
哪个返回:
HTTP 200 {
"token": "new jwt token value"
}
以上是 Django Rest Framework JWT:如何在登录时更改令牌到期时间 的全部内容, 来源链接: utcz.com/qa/428675.html