1

我正在使用“Cognito用户池授权人”(没有“AWS_IAM”选项,没有自定义编码的授权人)通过API网关将HTTPS作为HTTPS调用Lambda方法。为什么在Lambda中未收到Cognito自定义属性

在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“Authorization”头获取Cognito用户),iOS Cognito SDK的问题或Lambda本身的问题。

+1

API网关只是从Cognito获取上下文变量。由于自定义属性是当用户再次登录时出现的,我认为这与Cognito有关。 Cognito有人应该能够回答。 – Balaji

回答

2

API网关中的Cognito User Pool Authorizer使用Cognito发布的Id令牌。此Id令牌有效期为1小时,并通过内部调用Cognito刷新API自动被iOS SDK刷新。刷新后,Id令牌将具有最新值。 Refresh方法在高级SDK中不可用,因为它由SDK隐式调用。但是你可以使用低级SDK并直接调用刷新API,这会给你最新的Id令牌。 (我是Cognito团队的开发人员,并将此作为功能请求以允许从高级SDK刷新)。

+0

谢谢Vinay!您能否解释一下我可以使用什么“低级别SDK调用”进行刷新,直到有高级方法可用? – thomers

+1

这是要调用的API: http://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html 这是低级iOS SDK方法: http:///docs.aws.amazon.com/AWSiOSSDK/latest/Classes/AWSCognitoIdentityProviderInitiateAuthRequest.html 如果您还有其他问题,我可以咨询我们的团队中的iOS专家。 –

+0

嗨@VinayKushwaha - 你可以请解释你的答案多一点,我期待发送一个自定义字段在每个http代理调用(API网关),使用“$ context.authorizer.claims.property”\t正文映射。 (https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#context-variable-reference) 即使刷新后我能否做到这一点令牌已完成? - thanx提前 –

相关问题