Я пытаюсь вызвать лямбда-функцию через AWS API Gateway. Когда я упоминаю тип аутентификации NONE, он работает нормально, но API становится общедоступным, и любой, у кого есть URL-адрес, может получить доступ к моему API. Чтобы сделать вызов API безопасным, я использую тип аутентификации AWS_IAM, а также прикрепил политику AmazonAPIGatewayInvokeFullAccess к моему пользователю, но получаю эту ошибку:
{ message: "Missing Authentication Token"}
Я не знаю, что мне здесь не хватает.
Ответы:
Я думаю, вы напрямую пытаетесь получить доступ к ссылке API, это не сработает, потому что API защищен с помощью роли IAM, и вы должны предоставить аутентификацию AWS, то есть ключ доступа и секретный ключ.
Используйте расширение Postman Chrome для тестирования своего API: http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-use-postman-to-call-api.html
источник
Я потерял время по глупой причине:
При создании этапа отображаемая ссылка не содержит ресурсной части URL-адреса:
URL-адрес API: https://1111.execute-api.us-east-1.amazonaws.com/dev
API + RESOURCE URL https://1111.execute-api.us-east-1.amazonaws.com/dev/get-list
/ Получить-лист пропускал
И, конечно же, нужно убедиться, что конфигурация метода выглядит так:
источник
У меня была такая же проблема, и, похоже, это сообщение также отображается, если ресурс не может быть найден.
В моем случае я обновил API, но забыл выполнить повторное развертывание. Проблема была решена после развертывания обновленного API на моем этапе.
источник
Похоже (по состоянию на апрель 2019 г.) AWS API Gateway выдает это исключение по ряду причин - в основном, когда вы попадаете в конечную точку, недоступную для шлюза API Gateway, либо потому, что она не развернута, либо также в тех случаях, когда эта конкретная Метод HTTP не поддерживается.
Я хочу, чтобы шлюз отправлял более подходящие коды ошибок, такие как HTTP 405 Method not supported или HTTP 404 not found, вместо общего HTTP 403 Forbidden.
источник
Убедитесь, что вы сначала щелкаете конкретный ресурс в дереве этапов, так как это заполнит URL-адрес полным путем к ресурсу (а не только корневым путем):
Информацию о других причинах см. На странице http://www.awslessons.com/2017/aws-api-gateway-missing-authentication-token/.
источник
Убедитесь, что вы создали ресурс, а затем создаете внутри него метод. Это было проблемой для меня. благодаря
источник
Нашел это в документах:
Если бы использовалась авторизация AWS_IAM, вы бы подписали запрос, используя протоколы Signature Version 4.
Подписание запроса с помощью подписи версии 4
Вы также можете создать SDK для своего API.
Как создать SDK для API в API Gateway
После создания SDK для выбранной платформы на шаге 6 упоминается, что если вы используете учетные данные AWS, запрос к API будет подписан:
Чтобы инициализировать SDK, созданный с помощью шлюза API, с учетными данными AWS, используйте код, подобный приведенному ниже. Если вы используете учетные данные AWS, все запросы к API будут подписаны. Это означает, что вы должны установить соответствующие заголовки CORS Accept для каждого запроса:
источник
Если вы включили аутентификацию AWS_IAM, вы должны подписать свой запрос учетными данными AWS с помощью AWS Signature Version 4 .
Примечание : вход в консоль AWS не приводит к автоматической подписи запросов вашего браузера к вашему API.
источник
иногда это сообщение отображается, когда вы вызываете неправильный API
проверьте свою конечную точку api
источник
Я пробую все вышеперечисленное, если вы выполнили все шаги в приведенных выше ответах и не решили проблему, тогда:
Я думаю, что из-за того, что когда я создаю «ЗАПРОС МЕТОДА» (см. Шаг 2, как перейти в это меню), в «Авторизация» я выбираю «AWS_IAM» после тестирования api, в варианте тестирования aws, я пробую его в «почтальоне» "то я понимаю, что в" ЗАПРОС МЕТОДА ", в" Авторизация "я должен выбрать" нет "
Я меняю его на none, но, как я объясняю, AWS нужно развернуть снова.
источник
Эта ошибка в основном возникает, когда вы вызываете неправильную конечную точку api. Проверьте свою конечную точку api, которую вы вызываете, и проверьте это на шлюзе api.
источник
Если вы используете API с конечной точкой типа PRIVATE , убедитесь в следующем:
Вы вызываете API из своей учетной записи AWS (пример: из экземпляра EC2, созданного в вашей учетной записи)
Поместите необходимые учетные данные (доступ и секретные ключи) в экземпляр EC2 в маршрут ~ / .aws / credentials (этот маршрут предназначен для экземпляров linux). Если пользователь IAM использует MFA, также потребуется значение aws_session_token .
Используйте URL-адрес на основе vpce (конечная точка vpc). Пример: curl https://vpce-0c0471b7test-jkznizi5.execute-api.us-east-1.vpce.amazonaws.com/dev/api/v1/status
У вашего экземпляра EC2 есть группа безопасности, которая разрешает исходящий трафик в другую группу безопасности, принадлежащую vpce, например:
Ваша группа безопасности vpce разрешает входящий трафик из другой группы безопасности (предыдущая sg из экземпляра ec2), принадлежащая экземпляру EC2, например:
См. Https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-private-apis.html
источник
В моем случае это было довольно глупо. Я привык, что новые сущности создаются с помощью POST, и это давало сбой «Missing Authentication Token». Я пропустил это, по какой-то причине он был определен как PUT, который работает нормально.
источник
Прежде всего, проверьте, зарегистрирован ли 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
источник
Для записи, если вы не будете использовать учетные данные, эта ошибка также отображается, когда вы устанавливаете валидатор запроса в методе POST / PUT на «проверку тела, параметров строки запроса и ЗАГОЛОВКИ» или другой вариант «проверка строки запроса» параметры и ЗАГОЛОВКИ ".... в этом случае он будет искать учетные данные в заголовке и отклонять запрос. Подводя итог, если вы не собираетесь отправлять учетные данные и хотите, чтобы они оставались открытыми, вы не должны устанавливать эту опцию в валидаторе запроса (установите для него значение NONE или для проверки тела)
источник
Способствовать:
У меня была аналогичная ошибка, потому что мой ответ на возврат не содержал такого «тела»:
return {'statusCode': 200, 'body': "должен содержать тег body, если заменить его не получится"}
источник
У меня была такая же проблема, которую я решил следующим образом:
GET Method test
источник
Если вы настроили роль IAM для своего сервера с разрешением AmazonAPIGatewayInvokeFullAccess, вам все равно нужно передавать заголовки при каждом запросе. Вы можете сделать это в python с помощью библиотеки aws-requests-auth следующим образом:
источник
Что ж, для тех, у кого все еще есть проблема, и я действительно чувствую себя очень тупым после того, как осознал это, но я передал URL-адрес по
/items
умолчанию при добавлении api. Но я продолжал называть конечную точку с помощью/api
. Отдельное спасибоCarlos Alberto Schneider
, так как я понял свою проблему после прочтения вашего сообщения.источник