为什么 Lambda 中未收到 Cognito 自定义属性

Why are Cognito custom attributes not received in Lambda

我正在使用 "Cognito User Pool authorizer"(无 "AWS_IAM" 选项,无自定义编码授权方)通过 API 网关将 Lambda 方法作为 HTTPS 调用。

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

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

在 iOS 客户端上,我还可以成功获取所有用户属性(包括自定义属性),如我在

的回答中所述

问题是这样的:

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

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

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

我不知道这是否是 API 网关问题(因为我假设它是通过 HTTP "Authorization" header 获取 Cognito 用户), iOS Cognito SDK,或者 Lambda 本身的问题。

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