Python 使用JWT extended in Flask检查消息到API响应消息的完整性
假设我有一个API端点API.example.com/v1/data和一个需要@jwt的GET方法,如下所示: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. """
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')