首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS认知复位用户MFA

AWS认知复位用户MFA
EN

Stack Overflow用户
提问于 2018-05-23 21:00:46
回答 6查看 8.9K关注 0票数 17

我有一个认知用户池,它的MFA设置为Required,只有TOTP (即没有短消息)。

我的问题是如何为用户重置MFA?例如,如果用户丢失了他的手机,这样他就不用登录了。

我尝试过重置密码,但这只是重置密码,它不删除MFA。

在这个AWS文件的底部,它说

注释当前无法在中使用删除TOTP软件令牌操作。此功能计划用于将来的发行版。使用SetUserMFAPreference为单个用户禁用TOTP。

所以我尝试了SetUserMFAPreferenceAdminSetUserMFAPreference,它们只返回200 OK,但实际上并没有禁用MFA。我想这是由于用户池将MFA设置为Required

EN

回答 6

Stack Overflow用户

发布于 2020-02-11 14:34:06

此时,由于AWS不支持重置MFA (如果您的用户池需要MFA --使用AdminSetUserMFAPreference禁用MFA将返回200 OK,但它什么也不做),唯一的方法是使用可选MFA创建一个新的用户池(一旦创建了用户池,就必须创建一个从required更改为optional的新用户池)。然后,对于新的用户池,您必须在代码中手动执行MFA (如果这是您想要的东西)。

因此,一旦用户成功登录并且返回对象中有令牌,您就必须调用AssociateSoftwareToken,而不是返回令牌并启动MFA注册过程。令牌(如IdToken)只有在用户成功完成对AdminRespondToAuthChallenge的调用时才会返回给用户。

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

更新

并不是我最初的答案无效,而是为了提供更多的信息,以下是关于如何使用AdminSetUserMFAPreference的一些额外解释

首先,您需要一个具有可选 MFA的用户池。这里的关键字是可选的。此解决方案不适用于具有所需MFA的用户池。

有了用户池设置,我假设有一个用户正确地注册到您的用户池。这意味着他们可以根据您的用户池进行身份验证,而不会出现任何问题。当然,关键是他们需要提供MFA作为其身份验证过程的一部分。但是由于我们已经建立了MFA,MFA在您的用户池中是可选的,所以如果您坚持对您的用户强制使用MFA,这意味着您必须在您的代码中手动执行MFA。

好吧,到目前为止大家都很开心。但就像现实一样,悲伤的日子来临了。您的用户丢失其MFA代码,无法生成任何新代码。因此,您希望提供的可能性,他们的MFA重新注册,一个新的设备。当然,首先,您需要确保这是实际的用户请求这样的东西。我的意思是,你不希望任何人(但真正的用户)能够提出这样的请求。所以你需要先对他们进行鉴定。但事实上,他们无法认证(由于失踪的MFA),这是为什么他们结束在这里。那你现在能做什么?好吧,尽管这个部分不在这篇文章的范围之内,但作为一个小提示,你可以给他们发一封带有代码的电子邮件,并要求他们把它作为一次认证机制返回给你。

好的,回到手头的问题上。现在,您可以确定这是实际的帐户所有者正在请求MFA重置。你就是这样做的:

代码语言:javascript
复制
async function resetMfa(username) {
    const cognito = new AWS.CognitoIdentityServiceProvider();
    await cognito.adminSetUserMFAPreference({
            UserPoolId: "user pool ID",
            Username: username,
            SoftwareTokenMfaSettings: {
                Enabled: false,
            }
        }).promise();
}

一旦他们的MFA被禁用,为了重新注册一个新的设备,帐户所有者必须尝试一个新的登录。这一尝试将就像他们第一次登录到他们的帐户,他们将被要求注册一个新的MFA设备。

我希望这能澄清一些事情。如果您想知道如何使用MFA (手动),我有这个其他员额来解决它。

票数 6
EN

Stack Overflow用户

发布于 2021-01-12 23:18:09

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

从控制台更改它是不可能的,但是aws (可能通过set_user_pool_mfa_config() API)可以将其更改如下:

代码语言:javascript
复制
% aws cognito-idp set-user-pool-mfa-config --user-pool-id <userpool_id> --mfa-configuration ON --software-token-mfa-configuration Enabled=true

尽管我无法找到删除/更改“每个用户的MFA (OTP)”的方法。

票数 1
EN

Stack Overflow用户

发布于 2019-08-16 22:16:58

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

移除MFA =新的AWS.CognitoIdentityServiceProvider();

代码语言:javascript
复制
    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
    });

增加/更改外交部:

代码语言:javascript
复制
    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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50497388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档