为什么Cognito不会调用CreateAuthChallenge触发器?
0
【以下的问题经过翻译处理】 我想使用AWS Cognito配置自定义身份验证流程,因此我使用了这个和这个说明来完成。 以前,我配置了密码身份验证,并有可能将用户电子邮件或电话号码指定为用户名,通过自定义发件人触发器发送确认代码,它运行良好。 但随后添加自定义身份验证触发器后,我意识到没有“CreateAuthChallenge”调用-只有“DefineAuthChallenge”。所以现在我的步骤:
- 使用以下正文调用“InitiateAuth”:
{
"AuthFlow": "CUSTOM_AUTH",
"ClientId": "{{client_id}}",
"AuthParameters": {
"USERNAME": "{{username}}",
"SECRET_HASH": "{{secret_hash}}"
}
}
- 此调用的响应是:
{
"ChallengeName": "MY_AUTH",
"ChallengeParameters": {
"USERNAME": "59edb46e-...-8f74a7084057"
},
"Session": "AYABeC...jA_TyA"
}
- 同时在日志中,我仅看到一个带有以下事件作为参数的lambda调用:
{
"version": "1",
"region": "me-south-1",
"userPoolId": "me-south-1_...",
"userName": "59edb46e-...-8f74a7084057",
"callerContext": {
"awsSdkVersion": "aws-sdk-unknown-unknown",
"clientId": "44v...bp"
},
"triggerSource": "DefineAuthChallenge_Authentication",
"request": {
"userAttributes": {
"sub": "59edb46e-...-8f74a7084057",
"cognito:email_alias": "devops@example.com",
"cognito:user_status": "CONFIRMED",
"email_verified": "true",
"email": "devops@example.com"
},
"session": [],
"userNotFound": false
},
"response": {
"challengeName": null,
"issueTokens": null,
"failAuthentication": null
}
}
根据这个文档,我应该看到CreateAuthChallenge触发器的事件,但我什么也没看到。
为这些事件调用的触发器具有以下代码:
import json
import requests
def handler(event, context):
print('### EVENT ###')
print(json.dumps(event))
source = event.get("triggerSource", "unknown")
sessions = event.get("request", {}).get("session", [])
if source == "DefineAuthChallenge_Authentication":
event["response"]["issueTokens"] = False
event["response"]["failAuthentication"] = True
if len(sessions) == 0:
event["response"]["issueTokens"] = False
event["response"]["challengeName"] = "MY_AUTH"
event["response"]["failAuthentication"] = False
print(json.dumps(event))
return event
if len(sessions) == 1 and sessions[0].get("challengeName", "") == "CUSTOM_CHALLENGE" and sessions[0].get("challengeResult", False) and sessions[0].get("challengeMetadata", "") == "MY_AUTH":
event["response"]["issueTokens"] = True
event["response"]["failAuthentication"] = False
print(json.dumps(event))
return event
print("unexpected sessions sequence: ", sessions)
return event
if source == "VerifyAuthChallengeResponse_Authentication":
event["response"]["answerCorrect"] = False
return event
print("unexpected triggerSource: ", source)
return event
可以做些什么来使Cognito调用CreateAuthChallenge触发器根据文档传递公共和私人数据?
1 回答
- 最新
- 投票最多
- 评论最多
这些答案有用吗?为正确答案投票,以帮助社区从您的知识中受益。
0
【以下的回答经过翻译处理】 发现Lambda代码出现问题:
在第一步中,它返回了错误的 challengeName
,名为 MY_AUTH
。在根据文档将其更改为正确的名称 CUSTOM AUTH
后,一切已经正常工作了。
我不知道为什么Cognito没有引发任何错误并且继续返回 CUSTOM_AUTH
challenge名称,尽管我已经指定了 MY_AUTH
。