Flask 手动验证烧瓶扩展jwt';s访问令牌

Flask 手动验证烧瓶扩展jwt';s访问令牌,flask,flask-jwt,flask-jwt-extended,Flask,Flask Jwt,Flask Jwt Extended,我有一个SPA应用程序,它包含一个带有上传文件字段的表单。我有一个RESTAPI,它的端点通过扩展jwt jwt进行保护。要验证其余端点,我需要使用@jwt_。我还想验证上传请求 由于客户端的原因,我无法添加授权承载头,所以我想在提交表单时添加访问令牌作为隐藏字段 在我从表单中读取JWT访问令牌之后,手动验证它的最佳方法是什么 class Upload(Resource): def post(self): #TODO: check for access token access

我有一个SPA应用程序,它包含一个带有上传文件字段的表单。我有一个RESTAPI,它的端点通过扩展jwt jwt进行保护。要验证其余端点,我需要使用@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)

感谢您

在此扩展的flask jwt的作者。这是一个很好的问题。在扩展中,目前没有支持的方法可以做到这一点,从请求中获取令牌和解码令牌是紧密耦合在一起的。这将很难解耦,因为当整个解码链运行时,会发生很多有条件的事情。例如,仅当通过cookie发送请求时才检查CSRF值,或者为了黑名单功能区分访问令牌和刷新令牌

可以创建一个通用函数,它的签名类似于
decode\u和\u verify\u jwt(编码的\u令牌,is\u access\u token=True,check\u 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页面上制作一张票证,这样我就可以跟踪它,我很乐意为它工作

很好的解释。到目前为止,我找到的解决方案是使用decode_token方法。基于文档,它将返回一个解码的令牌(python dict),或者正如我测试的那样,将引发异常。不过你的解决方案更通用。是的,这将解码jwt。请注意,所有其他回调和基于它们的一切(如用户加载程序、get_jwt_identity等)在该端点中都不起作用。