Cognito 自定义身份验证触发器未从 Cognito

时间:2021-05-29 14:32:36

标签: amazon-cognito amazon-cognito-triggers

我尝试从 AWS CLI 调用 InitiateAuth API。我已经设置了定义身份验证,创建身份验证并正确验证身份验证 lambda 触发器。问题是,当我运行以下命令时,它显示错误:

aws cognito-idp initiate-auth --client-id <my_client_id> --auth-flow CUSTOM_AUTH --auth-parameters USERNAME=uname,ChallengeName="SRP_A",SRP_A="<srp_value>"

错误:An error occurred (UserLambdaValidationException) when calling the InitiateAuth operation: DefineAuthChallenge failed with error Cannot read property 'challengeName' of undefined.

我检查了定义身份验证 lambda 代码,以及 Lambda 执行的 Cloud Watch 日志。发生错误是因为来自 Cognito 的输入在事件 json(通常从 Cognito 发送到 Lambda)中包含一个空的 session 键。由于属性 challengeName 位于 session 键内(如官方文档所示)。

这是当我运行该命令时从 Cognito 发送到 Lambda 的 JSON 事件(我从 CloudWatch Lambda 日志中获得了这个 JSON,我打印了从 Cognito 发送的 event):

{
  version: '1',
  region: 'us-east-1',
  userPoolId: 'us-east-1_******',
  userName: 'uname',
  callerContext: {
    awsSdkVersion: 'aws-sdk-unknown-unknown',
    clientId: '<my_client_id>'
  },
  triggerSource: 'DefineAuthChallenge_Authentication',
  request: {
    userAttributes: {
      sub: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx',
      'cognito:email_alias': '<email>',
      'cognito:user_status': 'CONFIRMED',
      email_verified: 'true',
      name: 'Custom Test',
      email: '<email>'
    },
    session: [],                                       -----> !! Empty
    userNotFound: false
  },
  response: { challengeName: null, issueTokens: null, failAuthentication: null }
}

是什么原因?是因为我从 CLI 发送请求,所以 Cognito 无法创建会话或其他什么?我不知道。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

Session 保存以前的身份验证挑战结果(来自内置挑战或您自定义的挑战)。对于定义身份验证挑战 lambda 的第一次调用,它将为空。顾名思义,您必须在处理程序响应中定义身份验证质询。