假设我有一个API端点api.example.com/v1/data和具有@ jwt-required的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
因此,要获取此消息,您需要使用请求标头中的承载者“ access_token” 进行身份验证。
如何为该消息创建HMAC。理想情况下,我想添加访问令牌,以便检查整个消息的完整性。
所以我想在返回的JSON中有一个额外的字段,称为checksum,其值为hash(whole_message)。
答案 0 :(得分:1)
您可以使用Flask的after_request
注册一个在视图生成响应后处理响应的函数。
例如,要完全按照您的要求进行操作(我正在使用内置的python的hash
函数,可以根据需要导入/编写自己的函数):
@app.after_request
def after_request(response):
data = json.loads(response.get_data())
data['checksum'] = hash(response.get_data())
response.set_data(json.dumps(data))
return response
但是,您必须确保始终返回字典才能正常工作。这里有几种选择:
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)将校验和添加到响应头中(我将与此一起使用)。例如:
@app.after_request
def after_request(response):
response.headers['Checksum'] = hash(response.get_data())
return response
最后一点,如您在问题中所述,如果要使用访问令牌对响应进行哈希处理,则可以从request
对象访问此令牌,如下所示:
from flask import request
access_token = request.headers.get('Authorization')
因此,现在您可以根据需要使用access_token
。