如何在 AWS API 网关请求的后端获取 Cognito Identity Id?

How to get Cognito Identity Id in backend that is requested by AWS API Gateway?

我在我的 Web 应用程序中使用 AWS Cognito 身份验证。我有一个带有 REST API 的 PHP 后端。用户身份验证后,我使用 this library 向 AWS API 网关发出请求。 API 网关方法具有 HTTP 集成类型。他们将 HTTP 请求代理到我的 PHP 后端。如何在我的 PHP 后端获取 Cognito Identity Id?我需要在我的后端设置对 Cognito 用户的关系引用。

API 网关使呼叫者的身份 ID 在 request context 中可用。假设您正在使用 Cognito 身份池(联合),您正在寻找这个 属性:$context.identity.cognitoIdentityId.

您可以配置 API 网关将新 header 中的身份 ID 值发送到您的后端。为此,您必须:

  1. 打开方法配置的集成请求面板
  2. 展开 HTTP headers 部分并单击 "Add header" link
  3. 给你header一个名字,比如X-Cognito-Identity-Id
  4. 在 "mapped from" 字段中使用以下表达式:context.identity.cognitoIdentityId
  5. 使用右侧的复选标记 link 保存配置更改。

Re-deploy API 和您的 PHP 后端应该开始接收额外的 header 填充了来自原始请求的 Cognito 身份 ID。

对于@stefano 提供的答案无效的那些人,您可以将上下文变量 context.identity.cognitoIdentityId 替换为 context.authorizer.claims.sub

header name: X-Cognito-User-Id //或者你喜欢的任何名字

映射自:context.authorizer.claims.sub // returns 认知用户 ID。