首页 > 解决方案 > Cognito 自定义身份验证触发器未从 Cognito 获取会话

问题描述

我尝试InitiateAuth从 AWS CLI 调用 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.

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

这是当我运行该命令时从 Cognito 发送到 Lambda 的 JSON 事件(我从 CloudWatch Lambda 日志中获取了这个 JSON,我打印了从 Cognito 发送的 JSON 事件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 无法创建会话或其他什么?我不确定。任何帮助将不胜感激。

标签: amazon-cognitoamazon-cognito-triggers

解决方案


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


推荐阅读