Приложение Amazon Cognito Oauth2 Native: лучшие практики - PullRequest
1 голос
/ 14 января 2020

Я разрабатываю бэкэнд API для нативного приложения. Этот бэкэнд-сервис (разработанный с использованием java / springboot) развернут на AWS. Для защиты бэкэнд-API я планирую использовать Oauth2 (поток предоставления кода авторизации с PKCE).

Я пытаюсь добиться этого через Amazon API Gateway и Cognito User Pool. Это то, что я сделал до сих пор.

  1. Я создал пул пользователей Cognito
  2. Добавьте клиент приложения (идентификатор клиента приложения / секретный)
  3. Сконфигурированный домен и Сервер ресурсов
  4. Сконфигурированные настройки клиента приложения с предоставлением кода авторизации в качестве потока OAuth
  5. Создан пользователь с паролем по умолчанию, а также с измененным паролем.
  6. У меня настроен 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.

Все это работает нормально. Но у меня есть пара вопросов.

  1. Создание клиента приложения (шаг 2 выше) Каждый раз, когда пользователь загружает приложение из playstore. Связан ли клиент приложения для каждого пользователя или для каждого приложения?
  2. Нужно ли создавать нового пользователя (шаг 5 выше) каждый раз, когда пользователь загружает приложение и хочет его использовать? В моем приложении / бэкэнде реализован собственный процесс регистрации клиентов / входа в систему. Я не хочу, чтобы Amazon справился с этим. Но мне нужен хотя бы один пользователь в пуле cognito для получения кода (шаг A). Не уверен, как это должно быть обработано.
  3. В настоящее время я использую фиктивный URL обратного вызова. Так как это обязательное поле. Как я могу справиться с этим в моем родном приложении?

Ответы [ 2 ]

2 голосов
/ 14 января 2020

Чтобы добавить к очень хорошим моментам TuanVA:

Пользователи должны быть сохранены в Cognito, а также на вашем бэкэнде. Моя запись может помочь вам понять варианты, которые могут варьироваться в зависимости от того, где находится владелец безопасности.

Наиболее стандартным вариантом является использование частной схемы URI. основанный на обратном вызове, такой как com.mycompany.myapp: / callback

Если это поможет, у меня есть пример приложения Android, вы можете быстро запустить Cognito .

Мой пример довольно подробный и касается интеграции библиотек AppAuth, поэтому может быть более сложным, чем вам нужно.

1 голос
/ 14 января 2020
  1. Вам необходимо создать 2 клиента приложения (с секретом для внутреннего приложения) и без секрета для собственного приложения. secret для серверного приложения для вызова Cognito API в некоторых случаях. => ** Не каждый раз, только 2 клиента приложения **. AWS имеет ограничение. Ссылка: https://docs.aws.amazon.com/cognito/latest/developerguide/limits.html

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

  3. В качестве документа AWS вы можете установить URI обратного вызова как myapp://. Но я все еще пользуюсь фиктивным обратным вызовом. Я получаю токен из заголовков HTTP (которые возвращаются из Cognito)

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