Вот моя попытка объяснить эти варианты. Перед этим я хотел бы кратко упомянуть о Oauth2 , который является протоколом, на котором основан AWS Cognito.
В контексте AWS Cognito сам Cognito является сервером аутентификации (OAuth) , а также сервером ресурсов (поскольку мы создаем пользователей в пуле пользователей Cognito), и ваше приложение будет быть клиентом (который отправляет запрос аутентификации). Клиент должен сначала зарегистрироваться на сервере OAuth - это делается в разделе «Клиенты приложений» в Cognito.
Рекомендуемый поток OAuth2: Код авторизации. Поток предоставления . В этом потоке
i) Клиент отправляет имя пользователя / пароль на OAuth-сервер.
ii) Сервер OAuth проверяет и перезванивает клиенту с
код авторизации .
iii) Клиент снова отправляет этот код обратно на сервер OAuth
iv) OAuth-сервер отправляет клиенту токены .
Пожалуйста, прочитайте приведенную выше статью для более подробного объяснения OAuth2.
Теперь объясним параметры в настройках Cognito App Client:
1. Включить API входа для серверной аутентификации
С помощью этой опции ваше клиентское приложение может напрямую получать токены без с дополнительным этапом получения кода авторизации.
Есть такие API Cognito, как AdminInitiateAuth, Admin- *, которые делают это. Однако эти API требуют учетных данных администратора AWS. Следовательно, обычно эти вызовы выполняются внутренним сервером клиентского приложения. Внешний интерфейс может передать имя пользователя / пароль бэкэнду, а внутренний сервер может обмениваться данными с AWS Cognito и авторизовать пользователя.
2. Разрешить только пользовательскую аутентификацию
Здесь вы не используете поток предоставления кода авторизации, предоставленный OAuth. Вместо этого вы можете определить свои собственные шаги и проблемы. Ваше клиентское приложение может задать секретный вопрос и т. Д. Перед аутентификацией и выдачей токенов.
3. Включить поток имени пользователя и пароля (не SRP) для аутентификации на основе приложений
Это наименее безопасный поток. Это пропускает часть возврата кода авторизации и напрямую возвращает токены обратно клиенту.
Надеюсь, это объясняет.