带有Cognito用户池授权器和Lambda的API网关

带有Cognito用户池授权器和Lambda的API网关,lambda,aws-api-gateway,aws-cognito,serverless-architecture,Lambda,Aws Api Gateway,Aws Cognito,Serverless Architecture,我有一个架构,其中我使用带有Cognito用户池授权器的API网关,并从客户端ReST调用传递授权头中的IdToken 它工作得很好 我需要Lambda中的cognitoIdentityId。 已尝试在API网关的集成请求中映射正文模板 内容类型-应用程序/json { "cognito-identity" : "$context.identity.cognitoIdentityId" } 它不发送identityid(在事件或上下文中),而且它只将我的负载转换为这个json 在这种情况下,如

我有一个架构,其中我使用带有Cognito用户池授权器的API网关,并从客户端ReST调用传递授权头中的IdToken

它工作得很好

我需要Lambda中的cognitoIdentityId。

已尝试在API网关的集成请求中映射正文模板

内容类型-应用程序/json

{
"cognito-identity" : "$context.identity.cognitoIdentityId"
}
它不发送identityid(在事件或上下文中),而且它只将我的负载转换为这个json


在这种情况下,如何在我的有效负载完整的情况下获取Lambda中的identityid?

只有在使用Cognito Identity凭证时,Cognito Identity Id才可用。如果您想获得有关通过athorizer授权的Cognito用户池用户的信息,可以在context.authorizer.claims映射中找到

有关更多详细信息,请参阅

此外,如果希望此值在Lambda函数中可用,则它将位于event.requestContext.authorizer.claims映射(如果您使用Lambda代理集成)中,或者位于您选择将其与映射模板映射的任何位置(如果您未使用代理集成)


编辑以修复打字错误。

CognitoIdentityId
来自
联合身份池。如果您想要一个identityId,那么您必须使用
AWS-Cognito用户池在
AWS-Cognito-Federated-identifications
中创建一个标识池


然后,您需要验证您的UserPool用户,该用户将返回
JWT令牌(IdToken、AccessToken和refreshttoken)
。使用此IdToken,您可以调用
Cognito Federated Identifications API
的方法来获取IdentityId。

设置代理集成后,我将event.requestContext.identity.cognitoIdentityId设置为null。尽管我在授权人中获得了其他值,如电子邮件、sub、aud等。嗯,我只是从邮递员那里传递授权头中的idToken。我不打算在cognito中使用任何客户端AWS-SDK。我的设置如本论坛帖子所述:我的目标是获取identityId,这样我就可以从cognitoidentity中的getCredentialsForIdentity中获取临时secretKey和accessKey。同样,如果您使用的是Cognito用户池授权器,cognitoIdentityId将永远不会被填充。那么如何使用此体系结构获取identityId?或者如何通过这种方式获取临时secretKey和accessKey?我只是好奇——为什么你们要限制我们——“如果你们使用的是Cognito用户池授权器,cognitoIdentityId将永远不会被填充”?这是Cognito的限制,而不是API网关。如果您只是使用Cognito用户池,那么没有identityId。仅当您实际使用联邦标识功能时,才使用IdentityId。我只是尝试将我的API网关资源转换为代理集成—结果证明这种类型无法响应。我使用的是Cognito联邦身份——那么我如何才能将Cognito ID获取到我的lambda?但是无法通过一些集成请求映射模板将Cognito ID获取到我的lambda?