Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用JWT extended in Flask检查消息到API响应消息的完整性_Python_Python 3.x_Security_Flask_Flask Restful - Fatal编程技术网

Python 使用JWT extended in Flask检查消息到API响应消息的完整性

Python 使用JWT extended in Flask检查消息到API响应消息的完整性,python,python-3.x,security,flask,flask-restful,Python,Python 3.x,Security,Flask,Flask Restful,假设我有一个API端点API.example.com/v1/data和一个需要@jwt的GET方法,如下所示: from flask_jwt_extended import jwt_required from flask_restful import Resource class Data(Resource): @jwt_required def get(self): """ GET Response message. """

假设我有一个API端点API.example.com/v1/data和一个需要@jwt的GET方法,如下所示:

from flask_jwt_extended import jwt_required
from flask_restful import Resource

class Data(Resource):
    @jwt_required
    def get(self):
        """
        GET Response message.
        """
        return {"message":"important-info", "ts":datetime}, 200
因此,要获取此消息,您需要使用请求头中的承载“访问令牌”对自己进行身份验证

如何为此邮件创建HMAC。理想情况下,我希望添加访问令牌,以便检查整个消息的完整性

因此,我希望在返回的JSON中有一个额外的字段,名为checksum,带有值散列(整条消息)。

您可以使用Flask注册一个函数,该函数在视图生成响应后处理该响应

例如,要完全按照您的要求执行(我使用内置python函数,您可以根据需要导入/编写自己的函数):

但是,您必须确保始终返回一本字典才能使其正常工作。以下是几个备选方案:

1) 将视图的响应包含在另一个json中,例如:

@app.after_request
def after_request(response):
    data = json.loads(response.get_data())
    data = {
        'response': data,
        'checksum': hash(response.get_data())
    }
    response.set_data(json.dumps(data))
    return response
2) 将校验和添加到响应头(我将使用这个)。例如:

最后,如果您想使用访问令牌对响应进行散列,如您在问题中所述,您可以从
请求
对象访问此令牌,如下所示:

from flask import request
access_token = request.headers.get('Authorization')

因此,现在您可以使用
访问\u token
以任何您需要的方式。

实际上,您可能只需要使用https即可。它将比您自己提出的任何东西都更安全/更受审查,而且由于tcp,您可以确保您的消息不会通过网络被破坏。@vimalloc是的,请求/响应将通过https进行。然而,为了测试/乐趣和兴趣,我想实现这个特性。对于反向工程/分叉来说,这个特性可能值得一试。对您来说,有趣的部分可能是调试界面。认识到这不是一个答案,而只是一个相关的问题。
@app.after_request
def after_request(response):
    response.headers['Checksum'] = hash(response.get_data())
    return response
from flask import request
access_token = request.headers.get('Authorization')