Возврат неверного ответа на запрос в лямбда-авторизаторе. Является ли это возможным?

Я пытаюсь понять, авторизаторы в AWS Api Gateway. Как я понимаю, если исключение в логике имеет место в авторизаторе, то мы обязательно получим 401 с сообщением неавторизованным. Можно ли вернуть неверный ответ на запрос или необработанный ответ объекта?

Я обнаружил, что авторы работают немного странно:

1) ошибка пользовательских авторизаторов в Amazon API Gateway 500

2) https://forums.aws.amazon.com/message.jspa?messageID=753817

2 ответа

По состоянию на август 2023 года, попробовав различные эксперименты в течение нескольких недель, я также не думаю, что можно изменить код состояния HTTP, например, на 400, непосредственно в авторизаторе Lambda .

Например , вызов API с помощью авторизаторов API Gateway Lambda документирует как возможные только HTTP 200, 401 , 403 и 500.( также может быть возможным)

Тем не менее, терминология может сбивать с толку, поскольку:

  1. Авторизатор Lambda пользовательским ранее называлсяавторизатором.
  2. AWS API Gateway определяет пользовательскую интеграцию Lambda.
  3. Пользовательская интеграция Lambda сама по себе отличается от интеграции прокси-сервера Lambda.

Я предполагаю, что реализация авторизатора Lambda в настоящее время отражает это (он больше похож на пользовательский авторизатор , чем на авторизатор на основе в том, как его действительно можно настроить - желаю удачи в получении чего-то близкого, например, к RFC 6750, раздел 3.1 !)), поэтому некоторые руководства в аналогичной области ошибочно предполагают, что это возможно с помощью интеграции лямбда-прокси или сопоставления запросов/ответов, что справедливо для шлюза API, подключенного непосредственно к AWS LambdaLambda , а не обязательно к самому авторизатору Lambda . Что, конечно, досадно, потому что авторизатор Lambda , похоже, обещал собрать весь код аутентификации под одним зонтиком, к лучшему или к худшему. Возможно, AWS в какой-то момент выпустит новую версию, которая оправдает переименование, хотя сейчас я не понимаю, как это произойдет.

Однако интуитивно на данный момент это имеет смысл, поскольку все, что мы можем сделать для это:

  1. возвращаем оператор политики, который дает нам либо Allow = 200, либо Deny = 403.
  2. (ТС/JS)throw new Error('Unauthorized')или (Питон)raise Exception("Unauthorized")что дает нам 401
  3. вернуть плохо отформатированный вывод или вызвать любое другое исключение, что приведет к возникновению 500 AuthorizerConfigurationException.
  4. возможно 414414 URI запроса слишком длинныйвозврата вывода от средства авторизации лямбда,

Это возможно. Есть несколько решений.

  1. Лямбда-функция может выдавать пользовательское исключение, и вы можете выполнять основанный на исключениях перехват в шлюзе API для отправки кода состояния 400

  2. Используйте отрицательный ответ, но в контексте есть причина для отрицания. Когда происходит отказ, код может проверить причину в контексте и вернуть соответствующий ответ.

Пожалуйста, обратитесь к ссылкам ниже для отображения исключений https://docs.aws.amazon.com/apigateway/latest/developerguide/handle-errors-in-lambda-integration.html

http://awspapers.blogspot.com/2018/08/integrate-api-with-lambda-part-5.html

Другие вопросы по тегам