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

AWS Cognito cognitoIdentityPoolId与cognitoIdentityId在Lambda授权器中为空问题

问题描述

我正在尝试使用带联合身份的AWS Cognito用户池(User Pool)与身份池(Identity Pool),已完成以下配置:

  • 创建身份池并将Cognito设为其认证提供商
  • Cognito集成了Google身份提供商
  • 使用Amplify完成注册/登录流程,Amplify已配置身份池与用户池

登录后,身份在身份池中正常创建并关联到用户池中的用户,Amplify会话凭证中能看到有效的identityId与identityPoolId,也能正常调用Cognito同步并交换身份数据。

但通过API Gateway集成的Lambda处理程序存在问题:我使用旧版REST API,采用Lambda Proxy集成,并创建了一个仅将事件输出到日志的Lambda授权器。查看CloudWatch日志时发现identity字段中的关键信息为空:

"identity": {
    "cognitoIdentityPoolId": null,
    "accountId": null,
    "cognitoIdentityId": null,
    "caller": null,
    "sourceIp": "185.5.69.158",
    "principalOrgId": null,
    "accessKey": null,
    "cognitoAuthenticationType": null,
    "cognitoAuthenticationProvider": null,
    "userArn": null,
    "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36",
    "user": null
},

我使用Amplify API集成,日志中可见带预签名请求的授权头,请问为何cognitoIdentityPoolId与cognitoIdentityId为空?需要如何配置才能在Lambda授权器中获取身份信息?

原因与解决办法

核心原因

Lambda授权器里拿不到Cognito身份信息,本质是API Gateway没从预签名请求的凭证里解析出身份池数据,或者授权器配置没开启身份信息传递。

具体修复步骤

  • 设置API Gateway方法的身份验证类型
    进入API Gateway控制台,找到目标REST API的对应资源和方法,在「方法请求」里把「身份验证」改成AWS_IAM。因为预签名请求用的是IAM临时凭证,只有开启AWS_IAM验证,API Gateway才会解析请求里的身份数据并传给Lambda授权器。

  • 配置Lambda授权器的身份来源与权限

    1. 在Lambda授权器配置页,把「身份来源」设为method.request.header.Authorization——这是Amplify预签名请求默认使用的授权头。
    2. 确认授权器的调用角色权限:既要允许API Gateway调用该Lambda函数,也要给角色添加Cognito身份池相关的权限(比如cognito-identity:GetId,按需配置)。
  • 检查Amplify API配置
    确保Amplify调用API时用的是身份池生成的IAM凭证,在Amplify配置里明确指定授权类型为AWS_IAM:

    Amplify.configure({
      API: {
        endpoints: [
          {
            name: "MyAPIName",
            endpoint: "https://xxx.execute-api.region.amazonaws.com/stage",
            region: "region",
            authorizationType: "AWS_IAM"
          }
        ]
      }
    });
    
  • 验证请求与身份池配置

    1. 确认请求的预签名是用身份池的临时凭证(AccessKeyId、SecretAccessKey、SessionToken)生成的。
    2. 检查身份池的信任关系,确保允许Cognito用户池的用户获取临时凭证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 23:18:24