Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services AWS Cognito-重置用户MFA_Amazon Web Services_Amazon Cognito_Cognito_Multi Factor Authentication - Fatal编程技术网

Amazon web services AWS Cognito-重置用户MFA

Amazon web services AWS Cognito-重置用户MFA,amazon-web-services,amazon-cognito,cognito,multi-factor-authentication,Amazon Web Services,Amazon Cognito,Cognito,Multi Factor Authentication,我有一个Cognito用户池,其中MFA设置为Required,只有TOTP(即没有SMS) 我的问题是如何为用户重置MFA?例如,如果用户丢失了他的手机,那么他无论如何都不需要登录 我已经尝试重置密码,但这只是重置密码,它不会删除MFA 在这个底部,它说 注意删除TOTP软件令牌操作目前在API中不可用。此功能计划在将来的版本中使用。使用SetUserMFAPreference为单个用户禁用TOTP MFA 因此,我尝试了SetUserMFAPreference和AdminSetUserMFA

我有一个Cognito用户池,其中MFA设置为
Required
,只有
TOTP
(即没有SMS)

我的问题是如何为用户重置MFA?例如,如果用户丢失了他的手机,那么他无论如何都不需要登录

我已经尝试重置密码,但这只是重置密码,它不会删除MFA

在这个底部,它说

注意删除TOTP软件令牌操作目前在API中不可用。此功能计划在将来的版本中使用。使用SetUserMFAPreference为单个用户禁用TOTP MFA


因此,我尝试了
SetUserMFAPreference
AdminSetUserMFAPreference
,它们只返回200 OK,但实际上并没有禁用MFA。我猜这是因为用户池将MFA设置为
必需的

您可以给每个用户一个恢复代码,然后通过API端点编写一个Lambda,检查他们是否提交了正确的恢复代码。如果他们这样做,您可以在Lambda内调用以下命令来禁用用户的MFA:

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

在检查这些恢复代码时,请确保使用类似于
crypto.timingSafeEqual
的方法来抵御定时攻击。

如果您是管理员,可以使用以下AWS CLI命令进行更新:

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

有关更多信息,请查看。

实际上,您需要更改用户的设置,而不是首选项

删除MFA var cognitoidentityserviceprovider=new AWS.cognitoidentityserviceprovider()

要添加/更改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
    });

此时,由于AWS不支持重置MFA(如果您的用户池需要MFA-使用
AdminSetUserMFAPreference
禁用MFA将返回200 OK,但不会执行任何操作),因此唯一的方法是使用可选MFA创建新的用户池(您必须创建一个新的用户池,因为一旦创建了用户池,就禁止从
必需的
更改为
可选的
)。然后,对于新的用户池,您必须在代码中手动强制执行MFA(如果您需要)

为此,一旦用户成功登录并且返回对象中有令牌,您就必须调用
AssociateSoftwareToken
,而不是返回令牌并启动MFA注册过程仅当用户成功完成对
AdminRespondToAuthChallenge
的调用时,才会返回给用户


总之,使用可选的MFA,
AdminSetUserMFaReference
将起作用。这是在AWS上重置用户池中MFA的唯一方法(此时)。

我发现,即使用户添加到用户池中,也可以将MFA设置更改为“必需”。因此,您不必创建另一个用户池

无法从控制台进行更改,但aws cli(可能通过set_user_pool_mfa_config()API)可以进行如下更改:

% aws cognito-idp set-user-pool-mfa-config --user-pool-id <userpool_id> --mfa-configuration ON --software-token-mfa-configuration Enabled=true
%aws cognito idp设置用户池mfa配置--用户池id--打开mfa配置--启用软件令牌mfa配置=true

虽然我找不到删除/更改“每个用户的MFA(OTP)”的方法。

尝试了AdminSetUserMFA引用,但无效。您是否能够解决此问题。我想象设置
是否要启用多因素身份验证(MFA)?
作为
可选
可能需要允许个人用户选择首选项。您实际上如何向用户发送恢复代码。您必须手动执行此操作吗?想法是正确的,但是
adminSetUserMFAPreference
不会为用户重置MFA。@Mehran它在编写本文时重置了MFA。也许您可以编辑答案是否具有正确的功能?没有正确的功能。如果用户池是使用所需的MFA创建的,则无法重置MFA(至少在编写本文时-可能在将来AWS会修复此问题)。而且我确信,即使在编写答案时,您也无法重置MFA,因为OP说他们有相同的问题,必须在您编写答案之前进行测试。我不知道您的测试用例是什么,但只要您的用户池需要MFA,您的函数调用就应该以静默方式失败(并不是说失败)。我已经提供了一个解决方案作为答案。您可以参考该解决方案来了解我是如何做到的。注意:adminSetUserSettings已被弃用。请改用SetUserMFAPreference。问题明确表示他们对软件MFA(而非SMS)感兴趣.和
adminSetUserSettings
没有软件MFA选项。根据文档,它正在工作,并且不确定在OP状态下您面临什么问题,调用该API将返回200 OK,但它什么也不做。我知道文档说它可以工作,但它没有。我已经就此向AWS开出了罚单。原因是什么OP首先问这个问题的原因是API不工作。是的,它返回200 OK,所以API工作正常,但实际上并没有在这里禁用MFA
% aws cognito-idp set-user-pool-mfa-config --user-pool-id <userpool_id> --mfa-configuration ON --software-token-mfa-configuration Enabled=true