You need to enable JavaScript to run this app. 如何从经Amazon Cognito认证的HTTP API Gateway与Lambda调用中获取用户详情
优惠活动
大模型
产品
解决方案
定价
更多

如何从经Amazon Cognito认证的HTTP API Gateway与Lambda调用中获取用户详情

Lambda获取Cognito登录用户身份的实现方法

API Gateway在Cognito Authorizer完成Access Token有效性校验后,会自动把令牌中携带的用户身份信息注入到转发给Lambda的请求事件中,Lambda侧完全不需要重复做令牌验证流程,直接读取即可拿到用户身份。

直接从请求事件读取(零额外调用,性能最优)

这是绝大多数业务场景的首选方案,全程没有额外外部服务调用,基于API Gateway到Lambda的透传上下文即可完成用户识别,几乎无额外性能开销。
根据你对接的API Gateway类型不同,读取的字段路径有区别:

  • 对接REST API 形态的API Gateway:
    所有Cognito返回的用户Claims,都挂在事件的 requestContext.authorizer.claims 路径下,常见可直接读取的字段:

    • sub:用户的永久唯一标识,是最可靠的用户主键,所有业务场景都优先用这个字段关联用户数据
    • email、phone_number:用户注册绑定的联系方式
    • username:用户的登录名
    • cognito:groups:用户所属的权限组列表,可直接用来做接口权限判断
    • 所有你在User Pool中配置、且开启了令牌返回的自定义用户属性,都会在这个路径下读取到

    举个简单的读取示例(Node.js 运行时):

    exports.handler = async (event) => {
      // 读取透传的用户身份信息
      const userInfo = event.requestContext.authorizer.claims;
      const currentUserId = userInfo.sub;
      const userBindEmail = userInfo.email;
      // 后续业务逻辑直接基于拿到的用户ID处理即可
    }
    
  • 对接HTTP API 形态的API Gateway:
    Cognito的Claims存储路径和REST API有区别,需要从事件的 requestContext.authorizer.jwt.claims 路径下读取,可拿到的字段内容和REST API完全一致,只是路径层级不同。

需获取未包含在令牌内的用户详情时,调用Cognito接口拉取

为了控制Access Token的体积,令牌里只会返回你预先配置允许返回的属性。如果业务需要拿到没开在令牌返回范围内的用户数据(比如用户的详细地址、历史偏好设置这类非核心属性),可以在Lambda里按需调用Cognito接口拉取:

  • 给Lambda的执行IAM角色配置对应Cognito User Pool的只读权限
  • 直接用之前从事件里读到的用户sub作为查询主键,调用AdminGetUser接口拉取全量用户属性即可,不需要从请求里提取原始Access Token做查询,避免令牌泄露风险

实际开发的避坑提示

  • 千万别用username或者邮箱、手机号当用户的永久关联主键:这些字段都是支持用户自主修改的,只有sub是用户创建时生成的永久唯一ID,不会随用户信息变更而变化
  • 如果发现读不到预期的自定义属性,先去Cognito对应当前应用客户端的配置页,检查目标属性有没有被勾选为“允许在Access令牌中返回”,没勾选的属性不会被API Gateway透传到Lambda
  • 完全不需要在Lambda里重复做Access Token的签名校验、有效期校验:API Gateway的Authorizer已经完成了全量的有效性校验,只要请求能路由到Lambda,就说明令牌是完全合法的,重复校验只会增加不必要的计算开销

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.10 14:36:06