0

こんにちは皆さん、私はこれに何日も悩まされました。皆さんの何人かがそれを理解できることを願っています

このような単純な応答モードのラムダオーソライザーがあります。

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