AWS API Gateway с авторизацией cognito - PullRequest
0 голосов
/ 20 ноября 2018

В настоящее время я занимаюсь разработкой безсерверной архитектуры, в которой есть множество ресурсов и методов в шлюзе AWS API. Я планирую добавить аутентификацию Cognito (пул пользователей) и авторизацию в качестве безопасного уровня к шлюзу AWS API.

В AWS API Gateway есть 3 авторизатора: IAM, Cognito User Pool и пользовательская лямбда.

В моем случае для входа в систему и регистрации (аутентификации) используется пользовательский пул cognito через шлюз API. Это прекрасно работает. Мой пользователь предоставит идентификатор клиента приложения и секрет клиента для включения обоих процессов. После входа в систему я хочу, чтобы пользователь мог использовать токен доступа (возвращаемый пулом пользователей) для доступа к ресурсу через шлюз API.

Однако, мой пользователь может иметь другую роль, такую ​​как администратор, владелец или гость. Только пользователь может получить доступ к авторизованному API. Мой подход состоит в том, чтобы поместить пользователя в другую группу в пуле пользователей, назначить политику IAM для группы и включить пул идентификаторов. Это вынуждает меня изменить тип авторизации в API-шлюзе на IAM. и IAM требует, чтобы каждый запрос был подписан подписью V4.

Это означает, что все запросы должны регистрироваться по токену сеанса, ключу доступа, секрету (возвращенному после токена идентификатора обмена с объединенным пулом) вместо использования подхода, основанного на маркере доступа. Таким образом, в моем случае использования, после того как мой пользователь вошел в систему через шлюз API, мое клиентское приложение (инструмент web / mobile / postman) должно сгенерировать подпись и поместить в заголовок авторизации. Существуют ли альтернативные способы управления авторизацией в группе пользователей, но с использованием токена доступа в API-шлюзе? Насколько я понимаю, маркер доступа (в заголовке авторизации) гораздо проще в использовании, чем сложный процесс подписанной подписи.

Поправь меня, если я ошибаюсь. Спасибо.

Ответы [ 2 ]

0 голосов
/ 14 августа 2019

Вы на правильном пути, но вы выбрали один из способов авторизации пользовательских запросов в AWS.Вы используете IAM и Identity Pool и поэтому вынуждены подписывать каждый запрос с использованием Signature V4, предоставляемого AWS.

Вместо того, чтобы идти на это, я бы предложил, исходя из своего опыта, выбрать собственный Lambda Authorizer вместо Identity.Бассейн.В этом случае ваша аутентификация останется такой, какой вы ее уже создали.Но вместо применения IAM в качестве Authorizer в API-шлюзе вы можете создать лямбда-функцию, которая будет получать ARN API-шлюза, который пользователь хотел авторизовать в запросе, и пользователя ID_TOKEN, который вы получили во время аутентификации из пула пользователей.

{
  ...
  "cognito:roles": [
    "arn:aws:iam::**********:role/addBookSellerRole"
  ],
  "exp": 1565758916,
  "iat": 1565755316,
  ...
}

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

Получив JSON политики, вы можете сравнить его с ARN метода, полученного в запросе, со списком политик.Таким образом, вы должны сгенерировать документ политики, который будет разрешать или отклонять запрос.

Чтобы узнать больше об этом, посетите мой средний блог Авторизация с использованием Cognito + API Gateway + IAM .

0 голосов
/ 20 ноября 2018

Поможет ли это вместо этого?

Создать группы в пуле пользователей и назначить роль IAM группе .

И затем добавить пользователей вгруппа.

Больше документации здесь: https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-user-groups.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...