AWS API Gateway + Cognito + Lambda - $ context.authorizer.principalId пусто - PullRequest
0 голосов
/ 01 мая 2019

У меня есть типичная установка AWS, использующая API-шлюз с аутентификацией пула пользователей Cognito и интегрированный с функциями Lambda.

Все это работает нормально, но теперь мне нужно иметь возможность получить идентифицированный идентификатор пользователя внутри Lambda..

Я видел много вопросов / ответов по этому поводу на SO, но ни один из них не помог сделать это.Наиболее близким является этот ответ , который ссылается на эту документацию .

. Из этих ссылок выше я понимаю, что должен получить доступ к некоторому свойству "$ context.authorizer.утверждений "в моем шаблоне сопоставления для получения идентификатора пользователя, но я не смог найти список доступных свойств или какое из них следует использовать.

Я также пытался использовать" $ context.authorizer.principalId«но при этом возвращается только пустая строка.

В настоящее время я использую шаблон сопоставления« Метод запроса передачи »шлюза API, но пока пробовал много разных шаблонов сопоставления.

Что яздесь отсутствует или не так?

Пожалуйста, дайте мне знать, если потребуется какая-либо дополнительная информация.

1 Ответ

1 голос
/ 01 мая 2019

Я предлагаю использовать Lambda Proxy Integration . В этом случае событие, которое получает ваша лямбда, выглядит так:

{
...
  "requestContext": {
      "resourceId": "...",
      "authorizer": {
          "claims": {
              "sub": "<COGNITO SUB>",
              "iss": "...",
              "cognito:username": "<COGNITO USERNAME>",
              "aud": "...",
              "token_use": "id",
              "auth_time": "...",
              "exp": "...",
              "iat": "..."
              ...
          }
      },
      ...
  }
  ...
}

sub расположен на event.requestContext.authorizer.claims.sub, а имя пользователя на event.requestContext.authorizer.claims['cognito:username'].

Если вы используете шаблон сопоставления, вы можете сделать:

{
  "sub": "$context.authorizer.claims.sub",
  "username": "$context.authorizer.claims["cognito:username"]"
}
...