0

我有一个体系结构,我正在使用Cognit用户池授权者的API网关,并且我从客户端ReST呼叫的授权标头中传递IdToken。带有Cognito用户池授权者和Lambda的API网关

它工作正常。

我需要Lambda中的cognitoIdentityId。

在API网关试过身体模板映射在合并请求

内容类型 - 应用程序/ JSON

{ 
"cognito-identity" : "$context.identity.cognitoIdentityId" 
} 

它不发送identityid(事件或上下文),并把它转换我的有效载荷仅限于此json。

如何在这种情况下获得Lambda中的身份标识,并且我的负载保持不变?

回答

4

Cognito身份标识只有在您使用Cognito身份凭证时才可用。如果您想获取有关通过athorizer授权的Cognito用户池用户的信息,它将在context.authorizer.claims地图中可用。

有关更多详细信息,请参见this documentation。此外,如果您希望此值在您的Lambda函数中可用,它将位于event.requestConext.authorizer.claims映射中(如果您使用的是Lambda代理集成),或者您已选择映射到的任何位置它与您的映射模板(如果您不使用代理集成)。

+0

我在设置代理集成后将 event.requestContext.identity.cognitoIdentityId设置为null。虽然我在授权人中获得了其他值作为电子邮件,分支,审计等。 那么,我只是从postman传递授权标头中的idToken。我不打算使用任何客户端AWS-SDK进行认知。 我的设置是在这个论坛上的帖子描述: https://forums.aws.amazon.com/thread.jspa?threadID=252838 我的目标是让identityId,这样我可以得到暂时秘密密钥和accessKey getCredentialsForIdentity in cognitoidentity。 – dan

+0

同样,如果您使用的是Cognito User Pool Authorizer,cognitoIdentityId将永远不会被填充。 –

+0

那么如何通过这种架构获得身份ID?或者如何通过这种方式获得临时的secretKey和accessKey?我只是好奇 - 为什么你们限制我们 - “如果你使用Cognito用户池授权者,cognitoIdentityId永远不会被填充”? – dan

2

CognitoIdentityId来自Federated Identity Pool。如果你想要一个身份ID,那么你必须在AWS Cognito Federated Identities中用你的AWS Cognito User Pool创建一个身份池。 Click here

然后,您需要验证您的UserPool用户,它将返回您的JWT Tokens (IdToken, AccessToken and RefreshToken)。使用此IdToken,您可以拨打GetId方法Cognito Federated Identities API以获取IdentityId。

+0

但没有办法通过某个集成请求映射模板将Cognito ID添加到我的lambda中? –

相关问题