我对 AWS Cognito 有疑问:最初,UserPool 和 UserPool 客户端默认配置为:
authenticationFlowType: 'USER_SRP_AUTH'
用户还可以使用 MFA
现在我们决定切换到自定义身份验证挑战 Lambda 触发器
authenticationFlowType: 'CUSTOM_AUTH'
添加特定的身份验证逻辑
不幸的是,面对SOFTWARE_TOKEN_MFA
掉落的事实,AWS Cognito 的答案现在不同了(下一步不是有关设备的信息CUSTOM_AUTH
),并且 Amplify 抛出错误:
Cannot read properties of undefined (reading 'NewDeviceMetadata')
是否可以SOFTWARE_TOKEN_MFA
与自定义身份验证质询 Lambda 触发器一起使用?如果可以,如何正确执行此操作?
UPD:我在 Amplify 存储库创建了问题/错误报告,并附有完整描述
我使用CognitoIdentityServiceProvider.adminListUserAuthEvents来获取用户身份验证事件,但收到了无效的结果。我从 Opera 登录,但 Cognito 显示我使用的是 Chrome 8(这是一个错误)。
如果我得到原始数据navigator.userAgent
(例如:),我可以解决这个问题Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36 OPR/72.0.3815.400
,但我只收到这样的数据:
{
"EventId": ${EVENT_ID},
"EventType": "SignIn",
"CreationDate": ${CREATION_DATE},
"EventResponse": "Pass",
"EventRisk": {
"RiskDecision": "AccountTakeover",
"RiskLevel": "Low",
"CompromisedCredentialsDetected": false
},
"ChallengeResponses": [
{
"ChallengeName": "Password",
"ChallengeResponse": "Success"
}
],
"EventContextData": {
"IpAddress": ${MY_IP_ADDR},
"DeviceName": "Chrome 8, Linux",
"City": ${MY_CITY},
"Country": ${MY_COUNTRY}
}
}
Run Code Online (Sandbox Code Playgroud)
我不想做拐杖来澄清这些信息,例如创建preauth
Cognito 触发器,它将将此信息记录在另一个表中并自己处理此流程
UPD:我在这里找到的检测浏览器的拐杖
UPD 2:官方 AWS Github 存储库 …