如何为 Amazon Cognito 用户群体激活 TOTP 多重身份验证?

2 分钟阅读
0

我想为我的应用程序用户激活多重身份验证 (MFA)。如何使用 Amazon Cognito 用户群体使用基于时间的一次性密码 (TOTP) 令牌来执行此操作?

简短描述

若要为应用程序用户激活 TOTP MFA,请为用户群体设置 TOTP 软件令牌 MFA

**重要提示:**在配置 TOTP 令牌之前,请记住以下几点:

  • 在配置 TOTP 令牌之前,必须将 MFA 添加到用户群体中。
  • TOTP 令牌只有在用户尝试登录您的应用程序或已通过身份验证后才能与用户关联。
  • MFA 不支持用户群体中的联合用户。

以下是如何使用 AWS 命令行界面 (AWS CLI) 和 Google 身份验证器设置 TOTP MFA 的示例。

解决方法

**注意:**如果您在运行 AWS CLI 命令时收到错误消息,请确保您运行的是最新版本的 AWS CLI

1.    从 AWS CLI 中运行以下 AssociateSoftwareToken 命令以开始 MFA 令牌生成器设置:

aws cognito-idp associate-software-token --access-token eyJraWQiO........ua5Pq3NaA
{
    "SecretCode":
    "AETQ6XXMDFYMEPFQQ7FD4HKXXXXAOY3MBXIVRBLRXX3SXLSHHWOA"
}

2.    打开 Google 身份验证器主页,然后选择 Get started(开始使用)。

3.    选择 Enter a setup key(输入设置密钥)。

4.    对于 Account name(账户名称),请输入账户名称。例如,BobPhone。

**注意:**账户名称可以是任何字符串标识符。

5.    对于 Your key(您的密钥)文本输入,请复制并粘贴您在步骤一中运行的 AssociateSoftwareToken 命令所生成的密钥代码。

6.    选择 Type of key(密钥类型)下拉列表,然后选择 Time based(基于时间)。

7.    使用屏幕上显示的基于时间的密码和以下代码验证软件令牌:

aws cognito-idp verify-software-token --access-token eyJraWQiO........ua5Pq3NaA --user-code 269194 --friendly-device-name BobPhone
{
    "Status": "SUCCESS"
}

8.    使用 AWS CLI 中的以下命令之一将用户的 MFA 配置配置为 TOTP MFA:

set-user-mfa-preference

此命令允许用户设置自己的 MFA 配置。

示例 set-user-mfa-preference command

aws cognito-idp set-user-mfa-preference --software-token-mfa-settings Enabled=true,PreferredMfa=true --access-token eyJraWQiO........ua5Pq3NaA

admin-set-user-mfa-preference

此命令允许管理员设置用户的 MFA 配置。

示例 admin-set-user-mfa-preference command

aws cognito-idp admin-set-user-mfa-preference --software-token-mfa-settings Enabled=true,PreferredMfa=true --username Bob --user-pool-id us-east-1_123456789

9.    通过以下方式之一对用户进行身份验证,以测试您的设置:

Amazon Cognito 托管 UI

AWS CLI 中的 InitiateAuthAdminInitiateAuth API 调用。

**注意:**若要使用任一方法对用户进行身份验证,您需要拥有该用户的密码、用户名和软件 MFA 代码。

以下示例显示如何使用 AdminInitiateAuth 命令来测试用户身份验证。

示例 admin-initiate-auth command

aws cognito-idp admin-initiate-auth --user-pool-id us-east-1_123456789 --client-id 3n4b5urk1ft4fl3mg5e62d9ado --auth-flow ADMIN_USER_PASSWORD_AUTH --auth-parameters USERNAME=Bob,PASSWORD=P@ssw0rd

**重要提示:**确保将以下变量替换为您自己的信息:user-pool-idclient-idusernamepassword。此外,确保通过执行以下操作为用户群体应用程序客户端激活 ALLOW_ADMIN_USER_PASSWORD_AUTH 流:

1.    打开 Amazon Cognito console(Amazon Cognito 控制台)。

2.    选择 Manage User Pools (管理用户池)

3.    选择应用程序客户端,然后选择 Show details(显示详细信息)。

4.    选择 Enable username password auth for admin APIs for authentication (ALLOW_ADMIN_USER_PASSWORD_AUTH)(为管理员 API 启用用户名密码身份验证以进行身份验证(ALLOW_ADMIN_USER_PASSWORD_AUTH))。

5.  选择 Save app client changes(保存应用程序客户端更改)。

有关详细信息,请参阅管理员身份验证流程

admin-initiate-auth 命令的示例输出

{
    "ChallengeName": "SOFTWARE_TOKEN_MFA", 
    "ChallengeParameters": {
        "FRIENDLY_DEVICE_NAME": "BobPhone", 
        "USER_ID_FOR_SRP": "Bob"
    }, 
    "Session": "Xxz6iadwuWJGN4Z7f4ul5p50IHUqITquoaNxxyDvep.......3A6GokZWKeQ6gkFW4Pgv"
}

示例 admin-respond-to-auth-challenge 命令

aws cognito-idp admin-respond-to-auth-challenge --user-pool-id us-east-1_123456789 --client-id 3n4b5urk1ft4fl3mg5e62d9ado --challenge-name SOFTWARE_TOKEN_MFA --challenge-responses USERNAME=Bob,SOFTWARE_TOKEN_MFA_CODE=123456 --session  Xxz6iadwuWJGN4Z7f4ul5p50IHUqITquoaNxxyDvep.......3A6GokZWKeQ6gkFW4Pgv

**重要提示:**确保将以下变量替换为您自己的信息:client-idusernamesoftware_token_MFA_Code

admin-respond-to-auth-challenge 命令的示例输出

{
    "AuthenticationResult": {
        "ExpiresIn": 3600, 
        "RefreshToken": "eyJjdHkiOiJKV1QiLCJlbmMi.......dlbjrtyizlLzZZ5fjjCgL__AVHEzYycjJs_h3i-ly_KixDNtz9VEC",
    
        "TokenType": "Bearer", 
        "NewDeviceMetadata": {
    
            "DeviceKey": "us-east-1_28abrd7-10f7-9fc6-a931-3ede1c8ckd75", 
            "DeviceGroupKey": "-Gqkj3brS"
       
        }, 
        "IdToken": "eyJraWQiOiIzcFFSV29Pb........mNMbE_vvPkQYBuA9ackoER1aSABFGaKK4BpgPjMn7la_A", 
        "AccessToken": "eyJraWQiOi...........qwvQq4awt63TyWw"
   
    }, 
    "ChallengeParameters": {}
}

相关视频

AWS 官方
AWS 官方已更新 2 年前