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

问题描述

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

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

在烧瓶 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

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

标签: python-3.xflaskjwtwerkzeug

解决方案


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


推荐阅读