Cognito без пароля с SMS MFA - PullRequest
       23

Cognito без пароля с SMS MFA

0 голосов
/ 20 сентября 2018

Сначала увидели:

и, безусловно, прекрасные примеры от Buggy @ Github по адресу: https://github.com/buggy/project-x-server/tree/master/shopify/src

Тем не менее, все потоки без пароля, которые я видел до сих пор, похоже, также используют пользовательскую аутентификацию, такую ​​как капча.Я собираюсь использовать встроенный в AWS SMS MFA, который в других случаях отлично работал для меня.

Использование:

  • Усиление
  • React (vanilla)

Что работает:

  • Вход по номеру телефона и паролю, с кодом подтверждения.То есть это:

    const user = await Auth.signIn(this.state.phoneNumber, this.state.password)
    ...then...
    const data = await Auth.confirmSignIn(this.state.user, this.state.confirmationCode, 'SMS_MFA');
    
  • Без пароля пароль для входа без какого-либо MFA с использованием лямбда-триггера предварительной проверки подлинности (очевидно, не является жизнеспособным решением):

    event.response.issueTokens = true;
    event.response.failAuthentication = false;
    

Проблема : Когда я пытаюсь войти в учетную запись пользователя, отправляя только имя пользователя, например:

const user = await Auth.signIn(this.state.phoneNumber)

Amplify выдает сообщение об ошибке (с ошибкой):

null failed with error Generate callenges lambda cannot be called..

То есть без лямбда-триггеров, установленных для пула пользователей.

Если я установлю триггер defineAuthChallenge, который включает в себя следующее:

event.response.issueTokens = true;
event.response.failAuthentication = false;

Это, конечно, простологинит меня без МФА.Но если для issueTokens задано значение false, поток аутентификации завершается неудачно, и на следующей странице я получаю сообщение об ошибке по причине отсутствия идентификатора токена.

Если задать event.response.challengeName = 'SMS_MFA', ошибки исчезнут, но SMS не отправляется, и я не аутентифицируюсь.

Есть ли способ (а) на самом деле установить SMS MFA в качестве моей "особой задачи" таким образом, чтобы это работало?(б) еще лучше, вообще не использовать лямбда-триггеры и получать усиление и пул пользователей, чтобы обходиться без паролей?

В его нынешнем виде единственные обходные пути, которые я вижу:

  • внедрить SMS MFA вручную (нет, спасибо)
  • пароли с жестким кодом для пользователей на стороне клиента для регистрации и входа

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Может быть полезно: Аутентификация SMS без пароля с помощью AWS Cognito, Lambda Node.js и iOS Swift

Предлагается использовать SNS напрямую, а не через MFA Cognito.

0 голосов
/ 24 сентября 2018

Я реализовал Cognito без пароля с помощью:

  1. Установка истечения срока действия маркера обновления на очень долгое время
  2. Когда пользователь регистрируется, сгенерируйте одноразовый пароль и используйте обычную регистрацию Cognito.API для создания пользователя
  3. Никогда не сохраняйте и не показывайте пользователю одноразовый пароль - используйте обновление сеанса Cognito, чтобы пользователь оставался "авторизованным"
  4. Если срок действия маркера обновления истек или что-то еще пошло не так, злоупотребьтеCognito сбрасывает поток паролей, отправляя пользователю проверочный код и генерируя другой одноразовый пароль.

Это сработало для нас, но это отчасти хакерство.Однако он не опирается на какие-либо пользовательские триггеры и использует обычные клиентские API Cognito.Не пробовал это с МФА, хотя

...