You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda自定义认证报错Unrecognizable lambda output求助

AWS Lambda自定义认证(CUSTOM_AUTH)"Unrecognizable lambda output"错误排查

问题核心

用Node.js 16开发AWS Lambda自定义认证(CUSTOM_AUTH),设置固定挑战答案:

  • 前端调用cognito.adminInitiateAuth可正常获取会话令牌
  • 调用cognito.respondToAuthChallenge时触发"Unrecognizable lambda output"错误
  • Lambda日志已打印****** Correct answer provided. Issuing tokens. ******,说明挑战验证逻辑已执行,但返回格式不符合Cognito要求

排查方向与解决方案

1. 检查Lambda返回事件格式是否符合Cognito规范

Cognito对自定义认证Lambda的返回格式有严格要求,颁发令牌阶段必须包含以下结构:

{
  "version": "1", // 必须是字符串"1",不能是数字
  "response": {
    "issueTokens": true, // 布尔值,验证通过设为true
    "failAuthentication": false, // 布尔值,验证通过设为false
    "challengeParameters": {} // 无需后续挑战可留空
  }
}

常见错误:

  • 缺少顶层version字段
  • response结构嵌套错误
  • issueTokens/failAuthentication使用非布尔值(比如字符串"true")

2. 确认Node.js 16异步返回逻辑正确

Node.js 16环境下的Lambda若使用异步函数,必须确保返回完整的Promise结果:

  • 避免用回调函数而不包装为Promise,导致Lambda无法获取正确返回值
  • 不要在返回语句后执行异步操作,导致返回的事件不完整

3. 确保返回内容无额外输出或语法错误

Lambda返回值必须是纯净的合法JSON:

  • 不要将日志内容混入返回事件
  • 检查JSON是否存在语法错误(比如多余逗号、未闭合引号)

修正后的返回逻辑示例

exports.handler = async (event) => {
  // 挑战验证逻辑
  const isAnswerCorrect = /* 你的验证逻辑 */;

  if (isAnswerCorrect) {
    console.log("****** Correct answer provided. Issuing tokens. ******");
    return {
      version: "1",
      response: {
        issueTokens: true,
        failAuthentication: false,
        challengeParameters: {}
      }
    };
  } else {
    return {
      version: "1",
      response: {
        issueTokens: false,
        failAuthentication: true,
        challengeParameters: {
          errorMessage: "Incorrect answer"
        }
      }
    };
  }
};

内容的提问来源于stack exchange,提问作者Kean Allen Imam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 08:25:00