Я пытаюсь реализовать решение для аутентификации и авторизации для API, созданного поверх шлюза API AWS.Для этого я пытаюсь использовать пулы пользователей Cognito.Я хочу иметь несколько клиентов, и первый из них - это приложение с одностраничным интерфейсом.
Пулы пользователей Cognito реализуют OpenID Connect.Используя это, пользователь может создать пару (токен идентификации, токен доступа), предоставив свои учетные данные, где:
- токен идентификации содержит информацию о пользователе (аутентификация), включая любые пользовательские утверждения, вJWT.
- Маркер доступа содержит информацию об авторизации, включая sub для идентификации пользователя и области Oauth2, связанной с этим токеном, также в JWT.
Согласно нескольким источникам в этом сценарии клиент должен отправить токен доступа к API для выполнения действия.Затем шлюз API должен проверить, что у пользователя есть разрешение на его выполнение, и что токен имеет необходимые делегированные области действия.
Недавно Amazon представила функцию для интеграции API-шлюза с пользователем Cognito.я предположил, что пулы могут быть использованы для этой цели.Но я не нахожу прямолинейным.
Первое, что меня удивило, было то, что по умолчанию он ожидает, что токен идентификации будет отправлен в API вместо токена доступа.Соответствует ли это спецификации OpenID Connect?
Даже если можно изменить это поведение, чтобы оно использовало маркеры доступа, а затем настроить набор областей, которые должны присутствовать для запроса набыть авторизованным.Но в этом случае я не мог найти способ присоединить дополнительную логику, чтобы также проверить, что у пользователя есть необходимые разрешения для выполнения запрошенного действия.Можно ли это сделать, например, вызвав лямбда-авторизатор после проверки области действия?
Наконец, если бы мне нужно было проверять права доступа пользователя по токену доступа, мне пришлось бы запрашивать утверждения пользователя, используя sub свойство в токене.Это приведет к большому количеству запросов к конечной точке userInfo.Вместо этого было бы хорошо, чтобы эти требования были включены в сам маркер доступа.Есть ли способ сделать это?