嘿,我正在Cognito用户池上实现自定义身份验证流。我设法处理了Define和CreateAuthChallenge触发器,但没有处理VerifyAuthChallenge。
我将本文档用作指导:Verify Auth Challenge Response Lambda Trigger
如文档中所述,我接受verifylambda输入并将answerCorrect = true
添加到响应中。使用给定的信息,Define-和CreateChallenge-parts可以按预期工作。验证挑战答案后,我得到InvalidLambdaResponseException: Unrecognizable lambda output
作为回应。 verify-lambda成功存在,返回此对象:
{
"version": 1,
"triggerSource": "VerifyAuthChallengeResponse_Authentication",
"region": "eu-central-1",
"userPoolId": "eu-central-1_XXXXXXXXX",
"callerContext": {
"awsSdkVersion": "aws-sdk-dotnet-coreclr-3.3.12.7",
"clientId": "2490gqsa3gXXXXXXXXXXXXXXXX"
},
"request": {
"challengeAnswer": "{\"DeviceSub\":\"TestSub\"}",
"privateChallengeParameters": {
"CUSTOM_CHALLENGE": "SessionService_SendDevice"
},
"userAttributes": {
"sub": "8624237e-0be8-425e-a2cb-XXXXXXXXXXXX",
"email_verified": "true",
"cognito:user_status": "CONFIRMED",
"email": "X.XXXXXXXX@XXXXXXXXXX.de"
}
},
"response": {
"answerCorrect": true
},
"userName": "8624237e-0be8-425e-a2cb-XXXXXXXXXXXX"
}
在此之前,我遇到了一个问题,即“ challengeAnswer”部分在文档中被描述为字典,但实际上只是一个字符串,包含字典为json。遗憾的是,我无法在任何地方找到任何信息,了解为什么Cognito不接受返回的对象。
显然有人使用JavaScript:GitHub link
任何人都可以告诉我,响应对象应该是什么样,以便被Cognito接受吗?谢谢。
答案 0 :(得分:1)
好吧,所以我的错误是不考虑自定义身份验证流程。我找到了另一份文档,顺便说一句,您一定要使用:
Customizing your user pool authentication flow
我在文档here(触发器子页面)中遇到了2个错误的部分,而我遇到了1个错误。
错误的第1部分: 会话的DefineAuthChallenge和CreateAuthChallenge输入定义为质询结果列表。一切都很好,但是挑战结果对象的挑战元数据部分显示为错误,显示方式如下:“ ChallengeMetaData”,而应改为“ ChallengeMetadata”,小写的“ d”代表“ data”而不是大写的一个。这给了我“无法识别的lambda输出”错误,因为“ ChallengeMetaData”不是后端所期望的,它正在寻找“ ChallengeMetadata”,而该消息不存在。首次输入define auth挑战lambda时,不会显示此错误,因为该会话不包含任何挑战答案。不过,一旦您验证了挑战,就会填满它,然后大写的d会给您带来麻烦。
错误的第2部分: 如我的问题所述,“ challengeAnswer”的VerifyAuthChallenge输入是字符串,而不是字典。
所有这些错误的部分均正确显示在我在此处链接的第一个文档页面上。因此,我建议您使用它代替其他文档。
我这边的错误: 在您通过VerifyAuthChallenge-trigger验证自定义挑战后,我没有真正检查会发生什么。在给定的链接中,标题为“ DefineAuthChallenge:挑战(状态机)Lambda触发器”上方的图像中清楚地表明,在验证响应之后,再次调用DefineAuthChallenge触发器,我没有考虑过。 >
我希望我可以节省一个人用这个时间来解决这个问题:-)