我有一个SPA应用程序,其中包含带有上载文件字段的表单。我有一个rest API,其端点通过flask-extended-jwt JWT保护。为了验证REST端点,我使用@jwt_required。我也想验证上传请求。
由于客户端的原因,我无法添加Authorization Bearer标头,因此我考虑在提交表单时将访问令牌添加为隐藏字段。
从表单读取JWT访问令牌后,手动验证JWT访问令牌的最佳方法是什么?
class Upload(Resource):
def post(self):
#TODO: check for access token
access_token = None
if 'access_token' in request.form and request.form['access_token']:
access_token = request.form['access_token']
else:
message = json.dumps({'message': 'Invalid or missing token', 'success': False})
return Response(response=message, status=401, mimetype='text/plain')
if access_token:
#TODO: validate_token(access_token)
谢谢
答案 0 :(得分:2)
flask-jwt的作者在此处扩展。这是一个很好的问题。当前在扩展中尚无支持的方法,从请求中获取令牌并对其进行解码紧密耦合在一起。这很难去耦合,因为当完整的解码链运行时,有很多条件性的事情正在发生。例如,仅在通过Cookie发送请求时检查CSRF值,或为了将其列入黑名单功能而区分访问令牌和刷新令牌。
可以创建一个通用函数,其签名看起来像decode_and_verify_jwt(encoded_token, is_access_token=True, check_csrf=False)
。但是,这会使flask_jwt_extended中的其余代码复杂化,并且在一般情况下使用时会造成混乱。
我认为在这种情况下,只需在扩展中添加第四个查找会更容易,因此您可以使用类似以下内容的
app.config['JWT_TOKEN_LOCATION'] = ['headers', 'forms']
app.config['JWT_FORM_KEY'] = 'access_token'
# Use the rest of the application normally
如果您想在github页面上制作票证以便跟踪,我将很乐意为您服务。