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

开启Lambda集成后Serverless Auth接口无法获取idToken和accessToken

API Gateway Lambda集成获取POST Payload 问题解决

核心原因是API Gateway的Lambda集成会对请求结构做包装,和普通HTTP服务的req.body结构不一样,以下是具体解决方案:

1. 适配Lambda代理集成的事件结构

如果你的Serverless配置用的是默认的Lambda代理集成(lambda-proxy),API Gateway会把POST请求的payload放在event.body字段里,而且是JSON字符串格式,必须手动解析才能拿到参数:

修改Lambda处理代码:

exports.handler = async (event) => {
  // 解析JSON格式的请求体
  const requestBody = JSON.parse(event.body);
  const { idToken, accessToken } = requestBody;

  // 打印参数验证
  console.log('idToken:', idToken);
  console.log('accessToken:', accessToken);

  // 后续业务逻辑...
  return {
    statusCode: 200,
    body: JSON.stringify({ result: 'success' })
  };
};

2. 非代理集成配置映射模板

如果使用非代理Lambda集成,需要在serverless.yml中配置API Gateway映射模板,直接把请求payload的字段映射到Lambda的输入参数:

serverless.yml 配置示例

service: auth-service

functions:
  authHandler:
    handler: src/auth.handler
    events:
      - http:
          path: auth
          method: post
          integration: lambda
          request:
            templates:
              application/json: |
                {
                  "idToken": "$input.json('$.idToken')",
                  "accessToken": "$input.json('$.accessToken')"
                }

对应的Lambda处理代码

exports.handler = async (event) => {
  // 直接从event中获取映射后的参数
  const { idToken, accessToken } = event;

  console.log('idToken:', idToken);
  console.log('accessToken:', accessToken);

  // 后续业务逻辑...
  return {
    statusCode: 200,
    body: JSON.stringify({ result: 'success' })
  };
};

额外排查要点

  • 确认请求的Content-Type头部是application/json,如果是form-data或x-www-form-urlencoded,需要调整解析逻辑或映射模板。
  • 查看CloudWatch日志里的完整event对象,确认请求payload是否被正确传递(比如是否存在event.body,或者是否有其他嵌套结构)。
  • 检查Serverless框架版本,部分旧版本的集成配置逻辑可能有差异。

内容的提问来源于stack exchange,提问作者karPower

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:05:03