amazon-web-services - AWS API 网关 + Cognito + Lambda - $context.authorizer.principalId 为空

标签 amazon-web-services aws-lambda aws-api-gateway amazon-cognito

我有一个典型的 AWS 设置,使用 API Gateway 和 Cognito 用户池身份验证并与 Lambda 函数集成。

一切正常,但现在我需要能够在 Lambda 中获取经过身份验证的用户 ID。

我在 SO 上看到了很多关于这个的问题/答案,但没有一个有助于完成这项工作。最接近的是 this answer链接到 this documentation .

从上面的这些链接中,我了解到我应该访问映射模板上的“$context.authorizer.claims”的某些属性以获取用户 ID,但是我找不到可用属性的列表或应该使用哪个属性。

我也尝试使用 "$context.authorizer.principalId"但这只会返回一个空字符串。

我目前正在使用 API 网关“方法请求传递”映射模板,但到目前为止已经尝试了许多不同的映射模板。

我在这里错过了什么或做错了什么?

如果需要任何进一步的信息,请告诉我。

最佳答案

我建议使用 Lambda Proxy Integration .在这种情况下,您的 Lambda 收到的事件如下所示:

{
...
  "requestContext": {
      "resourceId": "...",
      "authorizer": {
          "claims": {
              "sub": "<COGNITO SUB>",
              "iss": "...",
              "cognito:username": "<COGNITO USERNAME>",
              "aud": "...",
              "token_use": "id",
              "auth_time": "...",
              "exp": "...",
              "iat": "..."
              ...
          }
      },
      ...
  }
  ...
}
sub位于 event.requestContext.authorizer.claims.sub和用户名 event.requestContext.authorizer.claims['cognito:username'] .

如果使用映射模板,您可以执行以下操作:
{
  "sub": "$context.authorizer.claims.sub",
  "username": "$context.authorizer.claims["cognito:username"]"
}

关于amazon-web-services - AWS API 网关 + Cognito + Lambda - $context.authorizer.principalId 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55940869/

相关文章:

python - 如何使用子进程缩小视频,然后将数据传输到标准输出并使用 ffplay 播放并保存

ffmpeg - 我是否缺少 FFMPEG 中的超时参数?

amazon-web-services - CloudFormation API 网关 CORS 问题对 XMLHttpRequest 的访问被阻止

amazon-web-services - 从 Swagger 错误导入 Amazon API Gateway - 不采用泛型

java - AWS Redshift Posix 模式匹配

amazon-web-services - AWS kibana/ES尝试创建策略但获取 “authorization exception”

node.js - lambda 触发器回调 vs context.done

python - aws api-gateway - cdk 阶段部署设置 - 无漂移更新

amazon-web-services - 如何使用Amazon SWF

amazon-web-services - 无法跨区域更新安全组规则