0

嗨,伙计们,我用了几天的时间,希望你们中的一些人能弄清楚

我有像这样的简单响应模式的 lambda 授权器。

我想将 JWT 令牌(user_id)中的值转发到我的 Flask API。

我的授权人工作正常,但我不知道在 Flask API 中访问 authorizer.claims。

exports.handler = async(event) => {
  const method = 'main';
  log.info(`[${method}] BEGIN`);
  log.info(`[${method}] incoming event= ${JSON.stringify(event)}`);
  const secret = await secretManager(secretName);

  const response = {
      isAuthorized: false,
      context: {
        authorizer: {
          claims: {}
        },
        error: {}
      }
  };

  const authorization = event.headers.authorization;

  if(!authorization){
    log.error(`[${method}] No authorization found`);
    response.context.error.message = 'No authorization found';
    response.context.error.responseType = 401;
    return response;
  }

  const auth = authorization.split(' ');
  if (auth[0] !== 'Bearer' || auth.length !== 2) {
    log.error(`[${method}] Invalid authorization`);
    response.context.error.message = 'Invalid authorization';
    response.context.error.responseType = 401;
    return response;
  }

  try {
    const decoded = verify(auth[1], secret.public_key, {
        algorithms: ['RS512'],
    });

    response.isAuthorized = true;
    response.context.authorizer.claims = decoded;

  } catch (error) {
    log.error(`[${method}] Error occured:${error.message}`);
    response.isAuthorized = false;
    response.context.error.message = error.message;
    response.context.error.responseType = 401;
  }

  log.info(`[${method}] END`);
  return response;

};

我的 Flask 应用程序是这样的。

我使用 blueprint 和 app.before_request_funcs 作为中间件。

from api.middlewares.fetchUser import fetchUser
from api.routes.blueprint import myBlueprint

app.before_request_funcs = {
    myBlueprint.name: [fetchUser]
}

app.register_blueprint(myBlueprint)

这是我想在我的 API 启动之前访问 authorizer.claims 以获取用户的地方。

from flask import request, g
from api.utils.logger import logger
import json


def fetchUser():
    logger.warn('FETCH USER')
    logger.warn(json.dumps(request.headers.to_wsgi_list()))
    logger.warn(json.dumps(request.authorization))

如何访问 authorizer.claims

谢谢。

4

0 回答 0