Я разрабатываю бэкэнд API для нативного приложения. Этот бэкэнд-сервис (разработанный с использованием java / springboot) развернут на AWS. Для защиты бэкэнд-API я планирую использовать Oauth2 (поток предоставления кода авторизации с PKCE).
Я пытаюсь добиться этого через Amazon API Gateway и Cognito User Pool. Это то, что я сделал до сих пор.
- Я создал пул пользователей Cognito
- Добавьте клиент приложения (идентификатор клиента приложения / секретный)
- Сконфигурированный домен и Сервер ресурсов
- Сконфигурированные настройки клиента приложения с предоставлением кода авторизации в качестве потока OAuth
- Создан пользователь с паролем по умолчанию, а также с измененным паролем.
- У меня настроен Amazon API (с сопоставление ресурсов с моим бэкэндом) с этим пулом Cognito в качестве Авторизатора.
При этих настройках мой рабочий процесс выглядит следующим образом
A. Вызовите /oauth2/authorize
конечную точку моего домена с response_type в качестве кода, а также передайте всю необходимую информацию, такую как идентификатор клиента, callbackurl, code_challenge_method, code_challenge et c. Это перенаправляет на /login
страницу. Я вхожу с именем пользователя / паролем, созданным на шаге 5 выше. Это вернет мне код.
B. Звоните /oauth2/token
с кодом, возвращенным с предыдущего шага, и всеми другими необходимыми деталями, включая code_verifier. Это вернет мне access_token (refresh_token, id_token)
C. Используйте этот токен для вызова конечной точки Amazon API Gateway.
Все это работает нормально. Но у меня есть пара вопросов.
- Создание клиента приложения (шаг 2 выше) Каждый раз, когда пользователь загружает приложение из playstore. Связан ли клиент приложения для каждого пользователя или для каждого приложения?
- Нужно ли создавать нового пользователя (шаг 5 выше) каждый раз, когда пользователь загружает приложение и хочет его использовать? В моем приложении / бэкэнде реализован собственный процесс регистрации клиентов / входа в систему. Я не хочу, чтобы Amazon справился с этим. Но мне нужен хотя бы один пользователь в пуле cognito для получения кода (шаг A). Не уверен, как это должно быть обработано.
- В настоящее время я использую фиктивный URL обратного вызова. Так как это обязательное поле. Как я могу справиться с этим в моем родном приложении?