AWS API Gateway - использовать токен доступа с авторизатором Cognito User Pool? - PullRequest
0 голосов
/ 18 мая 2018

Я настраиваю приложение с различными внешними интерфейсами (мобильными и веб-приложениями) и одним API-интерфейсом, работающим на Lambda и получающим доступ через AWS API Gateway.

Поскольку я планирую использовать Cognito для аутентификации иавторизовать пользователей, я установил авторизатор Cognito User Pool на своем API-шлюзе и несколько методов API.

При такой архитектуре кажется логичным, что мои приложения (например, приложение iOS или Vue.js)клиентские приложения с точки зрения OAuth, а моим бэкэндом API Gateway является сервер ресурсов.Исходя из этого поста форума Auth0 , кажется очевидным, что я должен поэтому использовать токен ID в своем клиентском приложении и передать токен доступа для авторизации ресурсов моего шлюза API.

Когда я нажимаюКонечная точка Cognito /oauth2/authorize, чтобы получить код доступа и использовать этот код для достижения конечной точки /oauth2/token, получает 3 токена - токен доступа, токен идентификатора и токен обновления.Пока все хорошо, так как у меня должно быть то, что мне нужно.

Вот где я столкнулся с трудностями - используя функцию тестирования на консоли авторизатора API Gateway Cognito User Pool, я могу вставить токен IDи это проходит (декодирование токена на экране).Но когда я вставляю токен доступа, я получаю 401 - unauthorized.

В моей настройке Cognito я включил только поток Authorization Code Grant с областями действия email и openid (похоже, этоминимально допустимый Cognito, так как я получаю сообщение об ошибке, пытаясь сохранить без хотя бы этих отметок).

Нужно ли добавлять какие-то определенные области, чтобы API-шлюз авторизовал запрос с кодом доступа?Если да, то где они настроены?

Или я что-то упустил?Разрешит ли API-шлюз использовать только токен ID с авторизатором пула пользователей Cognito?

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

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

Даже после выполнения этой дополнительной настройкиВы не можете использовать встроенную функцию проверки авторизатора с токеном доступа, только токен id.Типичное 80% решение от AWS!

Чтобы использовать токен доступа, вам необходимо настроить серверы ресурсов в пуле пользователей в App Integration -> Resource Servers, неважно, что вы используете, но я предполагаю, что вы используете <site>.comдля идентификатора, и у вас есть одна область действия с именем api.

. Не переходите к методу в APIG и введите Method Request для метода.Предполагая, что это уже настроено на авторизаторе, протестированном с токеном id, вы затем добавляете <site>.com/api в раздел Settings -> OAuth Scopes.

Просто добавив OAuth Scope, вы убедитесь, что токен теперь долженбыть токеном доступа, и токен id больше не принимается.

Это подробно описано здесь: https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-enable-cognito-user-pool.html

0 голосов
/ 18 мая 2018

Да, API-шлюз будет использовать idToken только для авторизации.

После того, как пользователь вводит правильные учетные данные, провайдер удостоверений предоставляет код доступа, разрешающий вводить правильные учетные данные, и этот код доступа используется клиентом только дляполучить idToken и refreshToken из конечной точки /oauth2/token для данного пользователя.Все ваши дальнейшие вызовы будут использовать только idToken в заголовке авторизации.

Даже после истечения срока действия кода доступа после получения пользовательских токенов.

...