我使用“Cognito用户池授权程序”(没有“AWS_IAM”选项,没有自定义编码授权程序)通过API网关将Lambda方法称为HTTPS .
在Lambda上,我在某些情况下通过 adminUpdateUserAttributes
设置了自定义用户属性 custom:partnerId
.
我可以通过Cognito User Pools AWS控制台验证是否已正确设置 .
在iOS客户端上,我也可以成功获取所有用户属性(包括自定义属性),如我在How to get Cognito user pool "sub" attribute on iOS的回答中所述
问题是这样的:
I do not receive this custom attribute in Lambda as event.requestContext.authorizer.claims['custom:partnerId']
与下一个API请求
iOS客户端上的 until I force the user to sign in explicitly again (带有用户名/密码) .
在显式登录之后,我会按预期收到 authorizer.claims
参数中包含的自定义属性 .
我不知道这是否是API网关问题(因为我假设它是通过HTTP“授权” Headers 获取Cognito用户),iOS Cognito SDK存在问题,或者Lambda本身存在问题 .
1 回答
API网关中的Cognito User Pool Authorizer使用Cognito发出的Id令牌 . 此Id令牌有效期为1小时,并通过内部调用Cognito刷新API自动刷新iOS SDK . 刷新后,Id令牌将具有最新值 . 刷新方法在高级SDK中不可用,因为它由SDK隐式调用 . 但您可以使用低级SDK并直接调用刷新API,这将为您提供最新的Id令牌 . (我是Cognito团队的开发人员,并将此作为功能请求,以允许从高级SDK刷新 . )