Пример IAM-аутентификации Amazon API Gateway со сгенерированным JS SDK

Я создал примеры GET и POST API на Amazon API Gateway в соответствии с их официальной документацией. Я создал JS SDK для этих API, который я использую для вызова этих API из JS-файла на стороне клиента, размещенного на S3. Это работает безупречно без какого-либо «Типа авторизации».

Теперь, когда я устанавливаю «Тип авторизации» для метода GET как «IAM», мне необходимо передать учетные данные IAM, чтобы он работал. Несмотря на передачу корневых учетных данных моей учетной записи AWS, я получаю это в заголовках ответа:

x-amzn-ErrorType:InvalidSignatureException:http://internal.amazon.com/coral/com.amazon.coral.service/

И, наконец, он возвращает код ошибки 403.

Мой вопрос: кто-нибудь успешно пытался использовать сгенерированный javascript SDK из Amazon API Gateway с аутентификацией IAM? Можете ли вы указать, где я могу ошибаться?

Спасибо.


person rk2    schedule 27.07.2015    source источник
comment
Я думаю, что этот вопрос лучше всего задать в службу поддержки клиентов / службы технической поддержки Amazon. Но если вы получите ответ там, пожалуйста, опубликуйте решение и здесь :)   -  person    schedule 28.07.2015
comment
Я уже задавал этот вопрос на форуме AWS, но все еще жду ответа. Думал проверить большее сообщество здесь. :) В любом случае, я буду держать в курсе, если у меня это работает.   -  person rk2    schedule 28.07.2015
comment
Это похоже на ошибку в генерации SDK. Кроме того, дружеское напоминание: никогда и нигде не используйте свои учетные данные root, вместо этого создайте пользователя admin IAM.   -  person adamkonrad    schedule 28.07.2015


Ответы (1)


Мне удалось решить эту проблему с помощью нескольких человек на форуме AWS. Похоже, что метод GET шлюза API ожидает пустое тело. По умолчанию, если вы следуете образцу README, который поставляется со сгенерированным JS SDK, передача «undefined» или просто «{}» внутри тела для GET приводит к несоответствию полезной нагрузки, что приводит к вычислению неправильной подписи.

На данный момент я только что внес небольшую поправку в файл /lib/apiGatewayCore/sigV4Client.js, жестко запрограммировав файл body = ''.

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

person rk2    schedule 30.07.2015