Ste*_*fan 3 amazon-cognito multi-factor-authentication
使用setPreferredMFA时,即使设置了 setPreferredMFA,Cognito 用户池中的 SMS MFA 状态也会被禁用。
SMS MFA 状态代表什么?启用或禁用它时它会做什么?
谢谢
这只不过是 AWS 控制台/API 响应不一致。示例:让我们为用户启用 SMS MFA:
aws cognito-idp set-user-mfa-preference --sms-mfa-settings Enabled=true,PreferredMfa=true --access-token <value>
Run Code Online (Sandbox Code Playgroud)
是的,在控制台中,它看起来仍然好像未启用 SMS MFA。但是这是错误的。让我们获取用户的数据:
aws cognito-idp get-user --access-token <value>
Run Code Online (Sandbox Code Playgroud)
{
"Username": "your-email@example.com",
"UserAttributes": [
{
"Name": "sub",
"Value": "491a3eba-381f-4c87-a7d6-befa21e49e82"
},
{
"Name": "email_verified",
"Value": "true"
},
{
"Name": "phone_number_verified",
"Value": "true"
},
{
"Name": "phone_number",
"Value": "+1234567890"
},
{
"Name": "email",
"Value": "your-email@example.com"
}
],
"PreferredMfaSetting": "SMS_MFA",
"UserMFASettingList": [
"SMS_MFA"
]
}
Run Code Online (Sandbox Code Playgroud)
你要看的是属性PreferredMfaSetting。它告诉您用户为自己选择了什么。
如果您现在尝试像这样进行身份验证:
aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --client-id <value> --auth-parameters USERNAME=<value>,PASSWORD=<value>
Run Code Online (Sandbox Code Playgroud)
您将收到如下回复:
{
"ChallengeName": "SMS_MFA",
"Session": "<session-value>",
"ChallengeParameters": {
"CODE_DELIVERY_DELIVERY_MEDIUM": "SMS",
"CODE_DELIVERY_DESTINATION": "+*********7890",
"USER_ID_FOR_SRP": "your-email@example.com"
}
}
Run Code Online (Sandbox Code Playgroud)
好的,那么控制台中的这个东西在做什么呢?它实际上已被弃用。看看这里的文档MFAOptions:https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html
因此,我们只需通过控制台启用 SMS MFA,然后检查以下输出GetUser:
{
"ChallengeName": "SMS_MFA",
"Session": "<session-value>",
"ChallengeParameters": {
"CODE_DELIVERY_DELIVERY_MEDIUM": "SMS",
"CODE_DELIVERY_DESTINATION": "+*********7890",
"USER_ID_FOR_SRP": "your-email@example.com"
}
}
Run Code Online (Sandbox Code Playgroud)
差不多就这样了。
| 归档时间: |
|
| 查看次数: |
2423 次 |
| 最近记录: |