为什么Cognito不会调用CreateAuthChallenge触发器?

0

【以下的问题经过翻译处理】 我想使用AWS Cognito配置自定义身份验证流程,因此我使用了这个这个说明来完成。 以前,我配置了密码身份验证,并有可能将用户电子邮件或电话号码指定为用户名,通过自定义发件人触发器发送确认代码,它运行良好。 但随后添加自定义身份验证触发器后,我意识到没有“CreateAuthChallenge”调用-只有“DefineAuthChallenge”。所以现在我的步骤:

  1. 使用以下正文调用“InitiateAuth”:
{
    "AuthFlow": "CUSTOM_AUTH",
    "ClientId": "{{client_id}}",
    "AuthParameters": {
        "USERNAME": "{{username}}",
        "SECRET_HASH": "{{secret_hash}}"
    }
}

  1. 此调用的响应是:
{
  "ChallengeName": "MY_AUTH",
  "ChallengeParameters": {
    "USERNAME": "59edb46e-...-8f74a7084057"
  },
  "Session": "AYABeC...jA_TyA"
}

  1. 同时在日志中,我仅看到一个带有以下事件作为参数的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

profile picture
专家
已回答 1 年前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则