加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – Django Rest Framework JWT:如何在登录时更改令牌

发布时间:2020-12-17 17:59:13 所属栏目:安全 来源:网络整理
导读:我正在使用Django REST框架JWT Auth进行会话创建和权限,唯一的问题是:当我登录并且在令牌过期后我无法继续执行我想要的操作,除非我再次登录.我还没有完全理解为其他设置提供的文档. 因此,任何人都可以解释一种动态创建(和刷新)我的令牌的方法(遵循最佳实践)
我正在使用Django REST框架JWT Auth进行会话创建和权限,唯一的问题是:当我登录并且在令牌过期后我无法继续执行我想要的操作,除非我再次登录.我还没有完全理解为其他设置提供的文档.

因此,任何人都可以解释一种动态创建(和刷新)我的令牌的方法(遵循最佳实践),这样我就可以在登录时继续进行操作.

P.S:我在前端使用角度2,我在Http请求头中插入令牌.谢谢.

解决方法

JWT令牌刷新有点令人困惑,我希望这个解释有所帮助.

>令牌在时间发出(令牌中的iat)
>令牌有一个到期日期(例如,now()1小时)
>令牌无法更改.服务器只能发布一个新的
> iat永远不会改变,但过期确实会随着每次刷新而改变

当您想要扩展令牌时,会发生以下情况:

>您将令牌发送到服务器端点/…/refresh/
>服务器检查其未过期:now()< = token.iat JWT_REFRESH_EXPIRATION_DELTA
>如果没有过期:

>发出一个新令牌(在json正文中返回,与登录相同)
>新令牌现在有效()JWT_EXPIRATION_DELTA
>令牌中发布的值不会更改
>应用程序现在有2个令牌(技术上).
> App丢弃旧令牌并开始发送新令牌

>如果已过期:返回错误消息和400状态

你有EXPIRATION = 1小时,REFRESH_DELTA = 2天.当您登录时,您将获得一个标记,上面写着“创建时间:Jun-02-6pm”.您可以刷新此令牌(或通过刷新从中创建的任何令牌)2天.这意味着,对于此登录,您可以在不重新登录的情况下使用令牌的最长时间是2天1小时.您可以每隔1秒刷新一次,但是在2天之后,服务器将完全停止允许刷新,为您留下有效1小时的最终令牌. (头疼).

设置

您必须在django设置文件的JWT_AUTH设置中的后端启用此功能.我相信它默认是关闭的.以下是我使用的设置:

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" 
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读