AWS Cognito - сброс пользователя MFA - PullRequest
0 голосов
/ 24 мая 2018

У меня есть пул пользователей Cognito, для которого MFA установлен на Required только с TOTP (т.е. без SMS).

Мой вопрос: как мне сбросить MFA для пользователя?Например, что если пользователь потеряет свой телефон, чтобы у него не было возможности войти в систему.

Я попытался сбросить пароль, но он только сбрасывает пароль, он не удаляет MFA.

Внизу этой документации AWS написано

ПРИМЕЧАНИЕ Операция удаления программного токена TOTP в настоящее время недоступна в API.Эта функциональность запланирована на будущий выпуск.Используйте SetUserMFAPreference для отключения TOTP MFA для отдельного пользователя.

Итак, я попробовал SetUserMFAPreference и AdminSetUserMFAPreference, они просто возвращают 200 OK, но фактически не отключают MFA.Я полагаю, это связано с тем, что в пуле пользователей установлено значение MFA Required.

Ответы [ 3 ]

0 голосов
/ 28 августа 2018

Если вы являетесь администратором, вы можете обновить его, используя следующую команду CLI AWS:

aws cognito-idp admin-set-user-mfa-preference

Для получения дополнительной информации посмотрите документацию .

0 голосов
/ 17 августа 2019

На самом деле вам нужно изменить настройки пользователя, а не настройки.

, чтобы удалить MFA var cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider ();

    var params = {
        UserPoolId: poolData.UserPoolId,
        Username: userid, /* required */
        MFAOptions: [ /* required */
        ]
    };
    cognitoidentityserviceprovider.adminSetUserSettings(params, function(err, data) {
        if (err) reject(err);       // an error occurred
        else     resolve(data);     // successful response
    });

Добавить / изменить MFA:

    var cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();

    var params = {
        UserPoolId: poolData.UserPoolId,
        Username: userid, /* required */
        MFAOptions: [ /* required */
            {
                AttributeName: 'phone_number',
                DeliveryMedium: 'SMS'
            }
        ]
    };
    cognitoidentityserviceprovider.adminSetUserSettings(params, function(err, data) {
        if (err) reject(err);       // an error occurred
        else     resolve(data);     // successful response
    });
0 голосов
/ 13 июля 2018

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

  const result = await cognito
    .adminSetUserMFAPreference({
      UserPoolId: AmplifyConfig.Auth.userPoolId,
      Username: userid,
      SoftwareTokenMfaSettings: {
        Enabled: false,
        PreferredMfa: false,
      },
    })
    .promise();

Обязательно используйте что-то вроде crypto.timingSafeEqual для защиты от временных атак при проверке этих кодов восстановления.

...