flo*_*rin 5 flask flask-jwt flask-jwt-extended
我有一个 SPA 应用程序,其中包含一个带有上传文件字段的表单。我有一个休息 API,其端点通过 Flask-extended-jwt JWT 进行保护。为了验证 REST 端点,我使用 @jwt_required。我也想验证上传请求。
由于客户端,我无法添加 Authorization Bearer 标头,因此我想在提交表单时将访问令牌添加为隐藏字段。
从表单中读取 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)
Run Code Online (Sandbox Code Playgroud)
谢谢
这里是flask-jwt-extended 的作者。这是一个很好的问题。目前在扩展中没有支持的方法来做到这一点,从请求中获取令牌并对其进行解码是紧密耦合在一起的。这将很难解耦,因为在完整解码链运行时会发生很多有条件的事情。例如,仅当请求通过 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
Run Code Online (Sandbox Code Playgroud)
如果你想在 github 页面上制作一张票以便我可以跟踪它,我很乐意为它工作。
| 归档时间: |
|
| 查看次数: |
2291 次 |
| 最近记录: |