为什么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 Antwort
0

【以下的回答经过翻译处理】 发现Lambda代码出现问题: 在第一步中,它返回了错误的 challengeName,名为 MY_AUTH。在根据文档将其更改为正确的名称 CUSTOM AUTH 后,一切已经正常工作了。

我不知道为什么Cognito没有引发任何错误并且继续返回 CUSTOM_AUTH challenge名称,尽管我已经指定了 MY_AUTH

profile picture
EXPERTE
beantwortet vor 5 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen