Han*_*xue 4 python flask flask-jwt-extended
登录用户的令牌有效期为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)
}
Run Code Online (Sandbox Code Playgroud)
但这意味着来自我的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
Run Code Online (Sandbox Code Playgroud)
有没有办法隐式扩展身份验证令牌?
vim*_*loc 17
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,如果是,请使用刷新令牌生成新的访问令牌,然后再次发出请求.
希望这可以帮助 :)
app = Flask(__name__)
app.config["JWT_SECRET_KEY"] = "super-secret" # Change this!
app.config["JWT_ACCESS_TOKEN_EXPIRES"] = timedelta(hours=1)
app.config["JWT_REFRESH_TOKEN_EXPIRES"] = timedelta(days=30)
jwt = JWTManager(app)
Run Code Online (Sandbox Code Playgroud)
根据您的要求更改时间
| 归档时间: |
|
| 查看次数: |
3921 次 |
| 最近记录: |