【问题标题】:Why are Cognito custom attributes not received in Lambda为什么在 Lambda 中未收到 Cognito 自定义属性
【发布时间】:2017-09-16 21:46:19
【问题描述】:

我正在使用“Cognito 用户池授权方”(无“AWS_IAM”选项,无自定义编码授权方)通过 API 网关将 Lambda 方法调用为 HTTPS。

在 Lambda 上,我在某些情况下通过 adminUpdateUserAttributes 设置了自定义用户属性 custom:partnerId

我可以通过 Cognito 用户池 AWS 控制台验证它是否已正确设置。

在 iOS 客户端上,我还可以成功获取所有用户属性(包括自定义属性),如我在How to get Cognito user pool "sub" attribute on iOS 的回答中所述

问题是这样的:

我在 Lambda 中没有收到此自定义属性 event.requestContext.authorizer.claims['custom:partnerId'] 与下一个 API 请求

直到我强制用户再次显式登录(使用用户名/密码)在 iOS 客户端上。

在此显式登录后,我会按预期收到包含在 authorizer.claims 参数中的自定义属性。

我不知道这是 API 网关问题(因为我假设它是通过 HTTP“授权”标头获取 Cognito 用户)、iOS Cognito SDK 的问题,还是 Lambda 本身的问题。

【问题讨论】:

  • API Gateway 只是从 Cognito 获取上下文变量。由于自定义属性在用户再次登录时存在,我认为这与 Cognito 有关。来自 Cognito 的人应该能够回答。

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


【解决方案1】:

API 网关中的 Cognito 用户池授权器使用 Cognito 颁发的 Id 令牌。此 Id 令牌有效期为 1 小时,并通过内部调用 Cognito 刷新 API 由 iOS SDK 自动刷新。刷新后,Id Token 将具有最新值。 Refresh 方法在高级 SDK 中不可用,因为它是由 SDK 隐式调用的。但是您可以使用低级 SDK 并直接调用刷新 API,这将为您提供最新的 Id Token。 (我是来自 Cognito 团队的开发人员,并将将此作为功能请求,以允许从高级 SDK 进行刷新。)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-09-08
  • 2020-07-08
  • 2019-04-27
  • 1970-01-01
  • 1970-01-01
  • 2013-05-21
  • 2019-02-10
  • 1970-01-01
相关资源
最近更新 更多