Cognito Логин MFA Проблема с проверкой SMS - PullRequest
2 голосов
/ 04 мая 2019

Я новичок в AWS Cognito и в настоящее время у меня 2 проблемы с ним:

  1. при выполнении входа с использованием MFA SMS.
  2. при установке флага MFA SMS навключено / отключено

Я использую Node.js и Amazon Cognito Identity SDK для JavaScript [1] [2]

Поток входа в мое приложение:

  1. Пользователь отправляет номер мобильного телефона (затем перенаправляется в форму проверки TOTP)

    1. В это время приложение достигает моей конечной точки API
    2. и, в свою очередь, вызываетфункция отправки TOTP, если номер зарегистрирован
    3. Пользователь получает код TOTP с помощью SMS
  2. Пользовательский код TOTP
    1. Приложение достигает моей конечной точки API
    2. и затем вызывает функцию для проверки TOTP
  3. Если проверка TOTP подтверждена, тогда мой API возвращает Cognito Token в приложение

Iмне удалось отправить TOTP с помощью SMS, но я не могу найти способ проверить TOTP, чтобы получить токен Cognito.Пример [3], показанный на странице Github, использует подсказку, поэтому все содержится в этой функции.Однако я не могу сделать это в моем случае, так как 2 вызова должны происходить на 2 разных экранах.Я попытался отделить функцию sendMFACode (), но вместо проверки TOTP он отправляет другое SMS.

Я бью стену, и я нашел ограниченные документы / ресурсы.

Ссылка:

  1. https://github.com/aws-amplify/amplify-js/tree/master/packages/amazon-cognito-identity-js
  2. https://github.com/amazon-archives/amazon-cognito-identity-js/blob/master/src/CognitoUser.js
  3. https://stackoverflow.com/a/51394500

Мои настройки пула пользователей «MFA необязательны», поэтому я могу использовать метод входа в систему по электронной почте (не отправляет SMS для входа по электронной почтеЯ знаю, что это странно. До сих пор мне удалось установить MFA в коде с помощью функции enableMFA().Однако на странице Github написано, что функция enableMFA() устарела, вместо этого используйте setUserMfaPreference().Я попробовал это и получил «УСПЕХ», но когда я открываю его в веб-консоли AWS, он все еще заявляет, что SMS MFA отключен.Я что-то здесь упускаю?

Вот мой код:

cognitoUser.sendMFACode(VerificationCode, {
     onSuccess: (result) => {
         console.log(result)
     },
     onFailure: (error) => {
         console.log(error)
     }
})

debug result:
{
    "code": "InvalidParameterException",
    "Name": "InvalidParameterException",
    "Message" "Invalid Parameter Required Session"
}

Примечание. Я получил исключение по недопустимым параметрам, хотя и успешно получил SMS.

1 Ответ

0 голосов
/ 08 мая 2019

Я сейчас борюсь с процессом MFA, но для включения / отключения MFA через SDK я нашел способ заставить его работать со следующим кодом.

setUserSettings: (req, res) => {
    const { access_token, enable } = req.body;
    /* ISOLATE START HERE */
    const params = {
      AccessToken: access_token,
      MFAOptions: [
        {
          AttributeName: "phone_number",
          DeliveryMedium: enable == "true" ? "SMS" : null
        }
      ]
    };

    cognitoIdentityServiceProvider.setUserSettings(params, (err, data) => {
      if (err) {
        console.log(err);
        res.status(400).json({ message: err.message });
      } else {
        console.log(data);
        res.status(200).json(data);
      }
    });
    /* ISOLATE END HERE */

  },

Это с использованием Node и Express.Вы можете изолировать основную функциональность и заставить ее работать в том контексте, который вам нравится, я выделил место для вырезания кода для изоляции.Документация для этого звонка находится здесь https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityServiceProvider.html#setUserSettings-property.

Я перезвоню, если получу, что МФА работает должным образом.

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