Отсутствует токен аутентификации при доступе к шлюзу API?

Я пытаюсь вызвать лямбда-функцию через AWS API Gateway. Когда я упоминаю тип аутентификации NONE, он работает нормально, но API становится общедоступным, и любой, у кого есть url, может получить доступ к моему API. Чтобы сделать вызов API безопасным, я использую тип аутентификации AWS_IAM, а также прикрепил политику AmazonAPIGatewayInvokeFullAccess к своему пользователю, но получаю эту ошибку:

{ message: "Missing Authentication Token"}

Я не знаю, что мне здесь не хватает.

Ответ 1

Я думаю, что вы напрямую пытаетесь получить доступ к ссылке API, это не сработает, потому что API защищен с помощью роли IAM, и вы должны предоставить аутентификацию AWS, то есть ключ доступа и секретный ключ.

Используйте расширение Postman Chrome для тестирования вашего API: http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-use-postman-to-call-api.html

Ответ 2

Я потерял время по глупой причине:

Когда вы создаете сцену, отображаемая ссылка не содержит ресурсную часть URL-адреса:

URL-адрес API: https://1111.execute-api.us-east-1.amazonaws.com/dev

API + URL-адрес RESOURCE https://1111.execute-api.us-east-1.amazonaws.com/dev/get-list

Отсутствует /get-list

И, конечно же, вам нужно проверить, что конфигурация метода выглядит следующим образом:

введите описание изображения здесь

Ответ 3

У меня была одна и та же проблема, и похоже, что это сообщение также отображается, если ресурс не найден.

В моем случае я обновил API, но забыл перераспределить. Проблема была решена после развертывания обновленного API на моем этапе.

Ответ 4

Нашел это в документах:

Если бы использовалась авторизация AWS_IAM, вы бы подписали запрос, используя протоколы Signature Version 4.

Подписание запроса с подписью версии 4


Вы также можете создать SDK для вашего API.

Как создать SDK для API в API Gateway

После того, как вы сгенерировали SDK для выбранной вами платформы, на шаге 6 будет указано, что если вы используете учетные данные AWS, запрос к API будет подписан:

  1. Чтобы инициализировать сгенерированный API-шлюзом SDK с учетными данными AWS, используйте код, подобный следующему. Если вы используете учетные данные AWS, все запросы к API будут подписаны. Это означает, что вы должны установить соответствующие заголовки CORS Accept для каждого запроса:

    var apigClient = apigClientFactory.newClient({
      accessKey: 'ACCESS_KEY',
      secretKey: 'SECRET_KEY',
    });
    

Ответ 5

Если вы включите аутентификацию AWS_IAM, вы должны подписать свой запрос с учетными данными AWS, используя AWS Signature Version 4.

Примечание: вход в консоль AWS не автоматически подписывает ваши запросы браузера на ваш API.

Ответ 6

Убедитесь, что вы создали Resource, а затем создали метод внутри него. Это было проблемой для меня. Спасибо

enter image description here

Ответ 7

Прежде всего, проверьте, зарегистрирован ли API, созданный вами в функции lamda, в вашем проекте AWS или нет. Для этого перейдите на шлюз API в консоли AWS. Если он не зарегистрирован, зарегистрируйте его. Это основная причина этой проблемы.

Вы даже можете увидеть в своем файле aws.export.js, что есть пути, соответствующие вашему API ['/items'].

Ваш API должен присутствовать там, иначе он не будет добавлять токен безопасности к запросам. Для этого просто зарегистрируйте его в облачной логике вашего проекта в консоли.

Если это там, то используйте вышеупомянутое решение
http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-use-postman-to-call-api.html

Ответ 8

Я не понимаю, почему я получаю эту проблему: https://9yvitjuem4.execute-api.eu-west-2.amazonaws.com/Dev1/getcreditscore Я успешно развернул приложение. Я создал ресурс и метод POST.

Авторизация NONE API Key Не требуется

Я нацеливаюсь на реальный ресурс и все же получаю ошибку: enter image description here enter image description here

Ответ 9

Похоже (по состоянию на апрель 2019 года) AWS API Gateway выдает это исключение по ряду причин - в основном, когда вы попадаете в конечную точку, которую API-шлюз не может достичь, либо потому, что она не развернута, либо также в тех случаях, когда этот конкретный HTTP-метод не поддерживается.

Мне бы хотелось, чтобы шлюз отправлял более подходящие коды ошибок, такие как HTTP 405 Method не поддерживается или HTTP 404 не найден, вместо общего HTTP 403 Forbidden.

Ответ 10

иногда это сообщение отображается при неправильном вызове API

проверьте свою конечную точку API