如何 POST Flask JWT Extended 的刷新令牌?
How to POST the refresh token to Flask JWT Extended?
我正在尝试通过此处的代码刷新 JWT 令牌。问题在于如何通过刷新获取新令牌。
这个有效:
curl http://127.0.0.1:5000/protected
{"msg":"Missing Authorization Header"}
这有效,我得到了我的令牌并将其放入 ACCESS
curl -H "Content-Type: application/json" -X POST -d '{"username":"test","password":"test"}' http://localhost:5000/login
这有效,我得到了我的用户名
curl -H "Authorization: Bearer $ACCESS" http://localhost:5000/protected
但是当令牌过期时,如何使用我的刷新令牌 and/or 访问令牌进行 curl 以获取我的新访问令牌?我已经尝试了很多 POST,但似乎没有任何效果:
https://flask-jwt-extended.readthedocs.io/en/latest/refresh_tokens.html
from flask import Flask, jsonify, request
from flask_jwt_extended import (
JWTManager, jwt_required, create_access_token,
jwt_refresh_token_required, create_refresh_token,
get_jwt_identity
)
app = Flask(__name__)
app.config['JWT_SECRET_KEY'] = 'super-secret' # Change this!
jwt = JWTManager(app)
@app.route('/login', methods=['POST'])
def login():
username = request.json.get('username', None)
password = request.json.get('password', None)
if username != 'test' or password != 'test':
return jsonify({"msg": "Bad username or password"}), 401
# Use create_access_token() and create_refresh_token() to create our
# access and refresh tokens
ret = {
'access_token': create_access_token(identity=username),
'refresh_token': create_refresh_token(identity=username)
}
return jsonify(ret), 200
# The jwt_refresh_token_required decorator insures a valid refresh
# token is present in the request before calling this endpoint. We
# can use the get_jwt_identity() function to get the identity of
# the refresh token, and use the create_access_token() function again
# to make a new access token for this identity.
@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
@app.route('/protected', methods=['GET'])
@jwt_required
def protected():
username = get_jwt_identity()
return jsonify(logged_in_as=username), 200
if __name__ == '__main__':
app.run()
尝试
curl -H "Authorization: Bearer $REFRESH" -X POST http://localhost:5000/refresh
对我来说只有这个有效,两者都是必需的 - post 数据和 Auth header。
curl -X POST -H "Content-Type: Application/json" -H "Authorization: Bearer $REFRESH" -d "{\"refresh_token\":\"$REFRESH\"}" http://localhost:5000/refresh
我正在尝试通过此处的代码刷新 JWT 令牌。问题在于如何通过刷新获取新令牌。
这个有效:
curl http://127.0.0.1:5000/protected
{"msg":"Missing Authorization Header"}
这有效,我得到了我的令牌并将其放入 ACCESS
curl -H "Content-Type: application/json" -X POST -d '{"username":"test","password":"test"}' http://localhost:5000/login
这有效,我得到了我的用户名
curl -H "Authorization: Bearer $ACCESS" http://localhost:5000/protected
但是当令牌过期时,如何使用我的刷新令牌 and/or 访问令牌进行 curl 以获取我的新访问令牌?我已经尝试了很多 POST,但似乎没有任何效果:
https://flask-jwt-extended.readthedocs.io/en/latest/refresh_tokens.html
from flask import Flask, jsonify, request
from flask_jwt_extended import (
JWTManager, jwt_required, create_access_token,
jwt_refresh_token_required, create_refresh_token,
get_jwt_identity
)
app = Flask(__name__)
app.config['JWT_SECRET_KEY'] = 'super-secret' # Change this!
jwt = JWTManager(app)
@app.route('/login', methods=['POST'])
def login():
username = request.json.get('username', None)
password = request.json.get('password', None)
if username != 'test' or password != 'test':
return jsonify({"msg": "Bad username or password"}), 401
# Use create_access_token() and create_refresh_token() to create our
# access and refresh tokens
ret = {
'access_token': create_access_token(identity=username),
'refresh_token': create_refresh_token(identity=username)
}
return jsonify(ret), 200
# The jwt_refresh_token_required decorator insures a valid refresh
# token is present in the request before calling this endpoint. We
# can use the get_jwt_identity() function to get the identity of
# the refresh token, and use the create_access_token() function again
# to make a new access token for this identity.
@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
@app.route('/protected', methods=['GET'])
@jwt_required
def protected():
username = get_jwt_identity()
return jsonify(logged_in_as=username), 200
if __name__ == '__main__':
app.run()
尝试
curl -H "Authorization: Bearer $REFRESH" -X POST http://localhost:5000/refresh
对我来说只有这个有效,两者都是必需的 - post 数据和 Auth header。
curl -X POST -H "Content-Type: Application/json" -H "Authorization: Bearer $REFRESH" -d "{\"refresh_token\":\"$REFRESH\"}" http://localhost:5000/refresh