Аутентификация и авторизация клиента на серверной службе для запроса, направляемого через API-шлюз - PullRequest
0 голосов
/ 16 января 2020

Я использую приведенную ниже архитектуру, чтобы разрешить доступ к серверной службе, размещенной локально через API-шлюз.

AWS Account 1 [ API Gateway -> VPC Link -> NLB1 ] => 
    AWS Account 2 [ NLB2 in Direct connection to on-premises ] => 
        On-premises [ backend service with Signature V4 authentication enabled ]

Я тестирую с помощью клиента Postman, запросы доходят до серверной службы, но с ошибкой ошибка - Missing Authentication Token. Я обнаружил, что заголовок авторизации был отброшен на шлюзе API, поэтому я сопоставил заголовок авторизации с другим именем X-Authorization в Lambda Authorizer, а затем снова сопоставил его с заголовком авторизации в запросе интеграции и отправил в бэкэнд-сервис. Это решило ошибку Missing Authentication Token. Теперь я вижу ниже ошибку с проверкой SigV4 на бэкэнд-сервисе -

<InvalidSignatureException>
  <Message>The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.</Message>
</InvalidSignatureException>

Глядя на подписанные заголовки между почтальоном -> Шлюз API, API-шлюз -> NLB -> Бэкэнд-сервис, я обнаружил, что имя хоста изменен с конечной точки шлюза API на конечную точку NLB, я предполагаю, что это причина того, что подпись не совпадает.

  1. Правильно ли использовать тот же заголовок авторизации, полученный от клиента к шлюзу API, на нашем бэкэнде служба для проверки клиента?
  2. Как аутентифицировать / авторизовать запросы от клиента на бэкэнд-сервис, полученный через API-шлюз?
  3. Можем ли мы получить номер клиента AWS на бэкэнд-сервисе, он нам нужен для внутреннего использования.
...