我在前端有 React 应用程序,在后端有 Node/express。
对于所有 Congito 用户,MFA 是强制性的。
我的应用程序中正常登录的流程(没有MFA)如下,
AWS-sdk
版本 2.X.X
和 initiateAuth
方法,用户将能够获得令牌。并且,代币被发送回 FE,用户转到 Dashbaord。启用 MFA 后,
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
。
我真的不知道下一步该做什么,继续前进。
您将收到 MFA_SETUP 作为下一个挑战,因为没有为用户配置 MFA。
因此,一旦收到此类响应,您需要通过显示二维码为用户配置 MFA,以便用户可以使用其身份验证器应用程序扫描代码并获取 6 位代码。
首先拨打
associate-software-token
获取秘钥代码。
aws cognito-idp associate-software-token --session "Session ID from InitiateAuth"
响应如下所示。
{
"SecretCode": "string",
"Session": "string"
}
使用此
SecretCode
设置MFA设备,并获得6位数字代码。
https://totp.app/
进行临时用途。一旦获得 6 位 OTP,您需要致电
verify-software-token
将软件令牌 MFA 状态标记为“已验证”。
aws cognito-idp verify-software-token \
--user-code "123456" \
--session "Session ID from AssociateSoftawareToken"
完成此操作后,您的 MFA 就已配置完毕,现在您将面临另一个挑战
SOFTWARE_TOKEN_MFA
。
按下图所示回应此挑战。
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"
```