响应 MFA_Setup 挑战 - React、Node/express、AWS-sdk 应用程序

问题描述 投票:0回答:1

我在前端有 React 应用程序,在后端有 Node/express。

对于所有 Congito 用户,MFA 是强制性的。

我的应用程序中正常登录的流程(没有MFA)如下,

  1. Cognito 用户输入用户名和密码(在 React 自定义登录页面中),凭证转到 Node/express API,使用
    AWS-sdk
    版本
    2.X.X
    initiateAuth
    方法,用户将能够获得令牌。并且,代币被发送回 FE,用户转到 Dashbaord。

启用 MFA 后,

  1. Cognito 用户输入用户名和密码,凭证转到节点/express,使用

    initiateAuth
    ,它尝试登录,但用户得到

    {
      "ChallengeName": "MFA_SETUP",
      "Session": "AYABeG0B9dZro_HAB...",
      "ChallengeParameters": {
         "MFAS_CAN_SETUP": "[\"SMS_MFA\",\"SOFTWARE_TOKEN_MFA\"]",
         "USER_ID_FOR_SRP": "user1"
      }
    }
    

现在我不知道该怎么办?我看过很多视频和文章,但流程不清楚。

在某处(https://www.youtube.com/watch?v=bKuX_YNykPQ)我看到,下一步是生成

QR code
,然后扫描二维码,但为此我们需要
AccessToken
。正如您在上面的代码片段中看到的,我不明白
AcessToken

我真的不知道下一步该做什么,继续前进。

reactjs node.js express amazon-cognito aws-sdk
1个回答
0
投票

您将收到 MFA_SETUP 作为下一个挑战,因为没有为用户配置 MFA。

因此,一旦收到此类响应,您需要通过显示二维码为用户配置 MFA,以便用户可以使用其身份验证器应用程序扫描代码并获取 6 位代码。

设置MFA以获得6位OTP

  1. 首先拨打

    associate-software-token
    获取秘钥代码。

    aws cognito-idp  associate-software-token --session "Session ID from InitiateAuth"
    

    响应如下所示。

    {
       "SecretCode": "string",
       "Session": "string"
    }
    
  2. 使用此

    SecretCode
    设置MFA设备,并获得6位数字代码。

    • 使用 libqrencode 生成二维码,然后从 Authenticator 应用程序扫描该代码。
    • 在您的身份验证器应用程序中手动添加此密钥代码,或使用
      https://totp.app/
      进行临时用途。
  3. 一旦获得 6 位 OTP,您需要致电

    verify-software-token
    将软件令牌 MFA 状态标记为“已验证”。

    aws cognito-idp verify-software-token \
    --user-code "123456" \
    --session "Session ID from AssociateSoftawareToken"
    

完成此操作后,您的 MFA 就已配置完毕,现在您将面临另一个挑战

SOFTWARE_TOKEN_MFA

通过完成 SOFTWARE_TOKEN_MFA 挑战获得 Cognito 代币

按下图所示回应此挑战。

1. When you first time configured MFA

   ```
   aws cognito-idp respond-to-auth-challenge \
   --client-id <CLIENT_ID> \
   --challenge-name MFA_SETUP \
   --challenge-responses USERNAME=<USERNAME> \
   --session "Session ID from VerifySoftwareToken,SOFTWARE_TOKEN_MFA_CODE=123456 "
   ```
    
2. When MFA is already configured

   ```bash
   aws cognito-idp respond-to-auth-challenge ^
   --client-id <CLIENT_ID> ^
   --challenge-name SOFTWARE_TOKEN_MFA ^
   --challenge-responses USERNAME=<USERNAME>,SOFTWARE_TOKEN_MFA_CODE=123456 ^
   --session "Session ID from InitiateAuth"
   ```
© www.soinside.com 2019 - 2024. All rights reserved.