AWS Custom Auth Lambda не работает на разных этапах (безсерверный фреймворк + nodejs) - PullRequest
0 голосов
/ 28 апреля 2020

ИСПОЛЬЗОВАНИЕ: Безсерверная структура + Nodejs + AWS

КОНТЕКСТ: у меня есть два этапа (разработка и тестирование), каждый из которых имеет собственную развернутую конечную точку шлюза API для ресурса / missionArea. * http://mlaiehweov/dev/missionArea * http://mlaiehweov/test/missionArea

У меня есть две функции лямбда-авторизации, которые я определил в своем сервисе missionArea. Они имеют ТОЧНЫЙ код логики c (я понимаю, что это может быть избыточно и может измениться позже). Один называется test_auth_hook , а другой dev_auth_hook . Внутри этой аутентификации я декодирую JWT и перехожу к целевой лямбде.

ПРОБЛЕМА: Моя пользовательская аутентификация работала абсолютно нормально, пока я не представил маршруты TEST. Вот что происходит на обоих этапах:

  1. Я отправляю POST в / login и получаю обратно свой токен JWT.
  2. Я создаю GET для / missionArea с моим токеном JWT на dev route и я успешно получаю ВСЕ мои missionAreas обратно
  3. Затем я получаю GET для / missionAreas / {1} и получаю: "{" Message ":" Пользователь не авторизован для доступа к этому ресурсу "}"

  4. ТОГДА я немедленно отправляю еще один GET в / missionArea, думая: "хотя бы этот маршрут будет работать", и я получаю {"Message": "Пользователь не авторизован для доступа к этому ресурс "}

  5. ПОТОМ Я отправляю еще один POST в / login, потому что, возможно, мой токен JWT неверен, верно? Так что я получаю еще один токен JWT обратно

  6. На этот раз, с моим новым JWT, я отправляю GET в / missionArea / {1}, думая, что это маршрут, который обязательно сломается. НО я на самом деле получаю эту миссию. Мне все хорошо.
  7. Так что теперь я решаю посетить GET для / missionArea, чтобы увидеть ВСЕ мои данные, а затем я получаю {"Message": "Пользователь не авторизован для доступа к этому ресурсу"}

Вещи, которые я пробовал:

  • Удаление авторизатора с тестовых маршрутов в шлюзе API полностью устраняет эту проблему на маршрутах разработки.
  • Удаление авторизатора на маршрутах разработки полностью устраняет проблему на тестовых маршрутах.
  • Я УВЕРЕН, что авторизаторы в TEST и DEV имеют разные имена.
  • Мой токен JWT НЕ является проблемой.
  • Кеширование отключено на обоих

Довольно интересно. Ошибка, которую я получаю, не выдается из моего специального авторизатора! Я даже не уверен, откуда это исходит.

МОЙ КОД:

**>>>>>> devAuth.ts AND testAuth.ts**
import 'source-map-support/register';
import { buildIAMPolicy } from './utils/buildPolicy';
const jwt = require('jsonwebtoken');

export const devHook = async (event, _context, callback) => {
  let token = event.authorizationToken;
  token = token.split(' ')[1];

  try {
    // Verify JWT
    const decoded = jwt.verify(token, process.env.JWT_SECRET);
    const user = decoded.user;
    console.log('DECOEED USER >>>', user);

    // Checks if the user's scopes allow her to call the current function
    // const isAllowed = authorizeUser(user.scopes, event.methodArn);
    const isAllowed = true;

    const effect = isAllowed ? 'Allow' : 'Deny';
    const userId = user.id;
    const authorizerContext = { user: JSON.stringify(user) };
    // Return an IAM policy document for the current endpoint
    const policyDocument = buildIAMPolicy(
      userId,
      effect,
      event.methodArn,
      authorizerContext
    );

    callback(null, policyDocument);
  } catch (e) {
    console.log('ERROR MSG:', e);
    callback('Unauthorized'); // Return a 401 Unauthorized response
  }
};

serverless.yaml

functions:
  dev_auth_hook:
    handler: devAuth.devHook
  test_auth_hook:
    handler: testAuth.testHook

  getAllMissionAreas:
    handler: handler.getAllMissionAreas
    events:
      - http:
          method: GET
          path: missionAreas
          cors: true
          authorizer: dev_auth_hook OR test_auth_hook

РЕШЕНИЕ: Я не знаю, в чем здесь проблема. Мне нужен этот авторизатор для работы на разных этапах. Я почти уверен, что логи c в самой аутентификации не проблема. Вам не разрешено развертывать несколько AWS пользовательских авторизаторов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...