gpt4 book ai didi

python - Flask JWT 在每个请求上扩展 token 的有效性

转载 作者:太空宇宙 更新时间:2023-11-03 12:15:49 31 4
gpt4 key购买 nike

场景

登录用户的 token 有效期为 24 小时。在此期间内,所有带有 @jwt_required 装饰器的请求都将当前访问 token 的有效期再延长 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)
}

但这意味着来 self 的应用程序的每个 API 调用都将是两个请求:1.实际HTTP请求2.刷新授权 token

@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

有没有办法隐式扩展授权 token ?

最佳答案

编辑:现在这里有关于此的文档:https://flask-jwt-extended.readthedocs.io/en/latest/refreshing_tokens/

这里是 flask-jwt-extended 的作者。从技术上讲,您实际上不能扩展 token ,只能用具有新过期时间的新 JWT 替换它。不过,您可以通过几种方法来模拟这一点。

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

以上内容应该可以正常工作,但您将创建大量访问 token ,这些 token 在创建后立即被丢弃,这可能并不理想。上面的一个变体是检查 token 是否即将过期(也许它已经过期一半了)并且只有在这种情况下才创建并返回一个新 token 。另一种变体是让客户端检查 token 是否即将过期(通过 javascript),如果是,则使用刷新 token 来请求新的访问 token 。为此,您需要在点 ('.') 上拆分 JWT,base64 解码来自该拆分(索引 1)的第二组字符串,并从那里获取 'exp' 数据。

执行此操作的第二种方法实际上是等待 token 过期,然后使用刷新 token 生成新的访问 token 并重新发出请求(被动而不是主动)。这可能看起来像是发出请求,检查 http 代码是否为 401,如果是,则使用刷新 token 生成新的访问 token ,然后再次发出请求。

希望这有帮助:)

关于python - Flask JWT 在每个请求上扩展 token 的有效性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46197050/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com