Возврат неверного ответа на запрос в лямбда-авторизаторе. Является ли это возможным?
Я пытаюсь понять, авторизаторы в 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.( также может быть возможным)
Тем не менее, терминология может сбивать с толку, поскольку:
- Авторизатор Lambda пользовательским ранее называлсяавторизатором.
- AWS API Gateway определяет пользовательскую интеграцию Lambda.
- Пользовательская интеграция Lambda сама по себе отличается от интеграции прокси-сервера Lambda.
Я предполагаю, что реализация авторизатора Lambda в настоящее время отражает это (он больше похож на пользовательский авторизатор , чем на авторизатор на основе в том, как его действительно можно настроить - желаю удачи в получении чего-то близкого, например, к RFC 6750, раздел 3.1 !)), поэтому некоторые руководства в аналогичной области ошибочно предполагают, что это возможно с помощью интеграции лямбда-прокси или сопоставления запросов/ответов, что справедливо для шлюза API, подключенного непосредственно к AWS LambdaLambda , а не обязательно к самому авторизатору Lambda . Что, конечно, досадно, потому что авторизатор Lambda , похоже, обещал собрать весь код аутентификации под одним зонтиком, к лучшему или к худшему. Возможно, AWS в какой-то момент выпустит новую версию, которая оправдает переименование, хотя сейчас я не понимаю, как это произойдет.
Однако интуитивно на данный момент это имеет смысл, поскольку все, что мы можем сделать для это:
- возвращаем оператор политики, который дает нам либо Allow = 200, либо Deny = 403.
- (ТС/JS)
throw new Error('Unauthorized')
или (Питон)raise Exception("Unauthorized")
что дает нам 401 - вернуть плохо отформатированный вывод или вызвать любое другое исключение, что приведет к возникновению 500 AuthorizerConfigurationException.
- возможно 414414 URI запроса слишком длинныйвозврата вывода от средства авторизации лямбда,
Это возможно. Есть несколько решений.
Лямбда-функция может выдавать пользовательское исключение, и вы можете выполнять основанный на исключениях перехват в шлюзе API для отправки кода состояния 400
Используйте отрицательный ответ, но в контексте есть причина для отрицания. Когда происходит отказ, код может проверить причину в контексте и вернуть соответствующий ответ.
Пожалуйста, обратитесь к ссылкам ниже для отображения исключений 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