Как реализовать вход без пароля с помощью OTP, используя адрес электронной почты или номер телефона в Amazon Cognito?

Я успешно реализовал процесс входа в систему без пароля OTP, следуя этому руководству с некоторыми изменениями.

При создании нового пользователя в Amazon Cognito меня просят выбрать между основным атрибутом входа пользователя:

Я также настроил несколько сценариев POSTMAN для успешного запуска потока. Вот запрос на инициацию потока:

Детали запроса:

  • Метод: ПОСТ

  • URL-адрес: https://cognito-idp.<region_id>.amazonaws.com/

  • Заголовки:

    • Тип контента: приложение/x-amz-json-1.1
    • X-Amz-Target: AWSCognitoIdentityProviderService.InitiateAuth
  • Тело:

    {
      "AuthFlow": "CUSTOM_AUTH",
      "ClientId": <CLIENT-ID>,
      "AuthParameters": {
        "USERNAME": <email or phone>
      }
    }
    

Текущее поведение: Я могу успешно завершить процесс входа в систему OTP, если:

  • Атрибут username заполнен адресом электронной почты, и пользователь был создан с адресом электронной почты в качестве основного атрибута входа.
  • Атрибут username заполнен номером телефона, и пользователь был создан с номером телефона в качестве основного атрибута входа.

Однако я не могу использовать как адрес электронной почты, так и номер телефона для одного пользователя как взаимозаменяемые, поскольку это зависит от основного атрибута входа, выбранного во время создания пользователя.

Проблема: Я пытаюсь реализовать поток, в котором адрес электронной почты или номер телефона могут использоваться для одного пользователя независимо от основного атрибута входа. В настоящее время это, похоже, ограничено конфигурацией регистрации.

Подробности: В моей реализации функция DefineAuthChallenge Lambda получает пустого пользователя и атрибут userNotFound, для которого установлено значение true в запросе события при попытке использовать неосновной атрибут.

Вопрос: Можно ли настроить Amazon Cognito так, чтобы один пользователь мог использовать адрес электронной почты или номер телефона для входа без пароля без OTP? Я не смог найти никакой документации по этому конкретному варианту использования. Я нашел этот вопрос, но ничего не могу получить из этого решения.

Будем очень признательны за любые рекомендации или ссылки на соответствующую документацию.

Спасибо!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Во-первых, если это клиентское приложение, которое напрямую вызывает Cognito API, рассмотрите возможность проксирования через собственный бэкэнд.

Теперь на серверной стороне вы можете использовать имя пользователя или адрес электронной почты для поиска пользователей, используя: ListUsers

Пример запроса:

{
 "AttributesToGet": [ "email","phone_number" ],
 "Filter": "<<username|email>>",
 "Limit": number,
 "PaginationToken": "string",
 "UserPoolId": "string"
}

Ожидаемый ответ:

{
"PaginationToken": "efgh5678EXAMPLE",
"Users": [
    {
        "Attributes": [
            {
                "Name": "sub",
                "Value": "eaad0219-2117-439f-8d46-4db20e59268f"
            },
            {
                "Name": "email",
                "Value": "[email protected]"
            }
        ],
        "Enabled": true,
        "UserCreateDate": 1682955829.578,
        "UserLastModifiedDate": 1689030181.63,
        "UserStatus": "CONFIRMED",
        "Username": "testuser"
    },
// TRUNCATED

Теперь просто используйте Username в ответе, чтобы продолжить аутентификацию.

Другие вопросы по теме