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

python – Flask JWT扩展了每个请求的令牌的有效性

发布时间:2020-12-20 12:34:38 所属栏目:Python 来源:网络整理
导读:脚本 登录用户的令牌有效期为24小时.在此期间内,使用@jwt_required装饰器的所有请求将使当前访问令牌的到期时间再延长24小时.最长有效期为168(24 * 7)小时. 可以使用access_token和refresh_token. ret = { 'access_token': create_access_token(identity=use
脚本

登录用户的令牌有效期为24小时.在此期间内,使用@jwt_required装饰器的所有请求将使当前访问令牌的到期时间再延长24小时.最长有效期为168(24 * 7)小时.

可以使用access_token和refresh_token.

ret = {
        'access_token': create_access_token(identity=username,fresh=True),'refresh_token': create_refresh_token(identity=username)
    }

但这意味着来自我的applicatino的每个API调用都将是两个请求:
1.实际HTTP请求
2.刷新身份验证令牌

@app.route('/refresh',methods=['POST'])
@jwt_refresh_token_required
def refresh():
    current_user = get_jwt_identity()
    ret = {
        'access_token': create_access_token(identity=current_user)
    }
    return jsonify(ret),200

有没有办法隐式扩展身份验证令牌?

解决方法

flask-jwt-extended的作者在这里扩展.从技术上讲,您实际上无法扩展令牌,您只能将其替换为具有新过期时间的新JWT.有几种方法可以模拟这个.

首先,不是让客户端请求新令牌,而是让服务器本身只是在每个请求上隐式发回一个新令牌.您可以将新JWT发送回标头而不是JSON有效负载,这样您就不必修改JSON数据来考虑新JWT的可能性.您的客户需要知道这一点,他们需要在每个请求上检查新的标头,并将其当前的JWT替换为新的JWT(如果存在).您可以使用烧瓶after_request方法来执行此操作,因此您不必将该功能添加到所有端点.将JWT存储在cookie中时可以获得类似的效果,区别在于cookie会自动存储在您的浏览器中(因此您的客户端不必在每次请求时手动查找它们),并且增加了CSRF的复杂性如果你走这条路的保护(http://flask-jwt-extended.readthedocs.io/en/latest/tokens_in_cookies.html).

上面应该可以正常工作,但你会创建很多访问令牌,这些令牌在创建之后就会被丢弃,这可能并不理想.上述的一种变体是检查令牌是否即将到期(可能是否超过了到期的一半)并且如果是这种情况,则仅创建并返回新令牌.另一种变体是让客户端检查令牌是否即将到期(通过javascript),如果是,则使用刷新令牌请求新的访问令牌.要做到这一点,你需要将JWT分成点(‘.’),base64解码来自该分裂的第二组字符串(索引1),并从那里获取’exp’数据.

实现此目的的第二种方法实际上是等待令牌过期,然后使用刷新令牌生成新的访问令牌并重新生成请求(反应而非主动).这可能看起来像发出请求,检查http代码是否为401,请使用刷新令牌生成新的访问令牌,然后再次发出请求.

希望这可以帮助 :)

(编辑:李大同)

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

    推荐文章
      热点阅读