有没有一种安全的方法来拦截 Flask 中的请求,解密身份验证令牌,然后改变请求主体或存储在任何有用的上下文中

Is there a safe way to intercept a request in Flask, decrypt the authentication token and then mutate the request body or store in any useful context

我不确定这是否可行,但我正在尝试发现可以使我的代码更丰富的模式 maintainable/extendable。现在我不喜欢我必须在每个请求方法视图函数中调用令牌解码函数,我发现 @before_request 装饰器附加到蓝图非常方便,但我还没有弄清楚如何变异请求主体,以便该函数可以“神奇地”期待请求主体中的解密有效负载。如果不允许这样做,我也可以从软件的角度完全理解...

我正在寻找这样的东西:-

Edit incoming request body payloads in flask api

目前我的设置是:

class MyMethodView(MethodView):
    def post(self):
        token = request.headers.get('token')
        identifier, is_valid = decrypt_token(token)
        # Use identifier for endpoint 

我想做的是

class MyMethodView(MethodView):
    def post(self):
        identifier= request.get_json().get('identifier')
        # Use identifier for endpoint 

使用以下

blueprint.@before_request():
def authenticate():
  token = request.headers.get('token')
  identifier, is_valid = decrypt(token)
  # Some how modify the request body with the identifier

  if is_valid: 
    return None
  else:
    #Unauthorized

我想我的一些好奇心围绕着是否有更好的方法来做到这一点,而不是向每个函数添加身份验证检查逻辑,从我的角度来看,我可以构建一些 public 端点来测试在本地,然后在不修改这些功能的情况下添加一些代码即可添加身份验证。

您可以将解码后的令牌存储在 before_action 中的 flask.g 对象中,以使其在该请求的生命周期内可用。 https://flask.palletsprojects.com/en/1.1.x/appcontext/