具有Cognito用户池授权程序和Lambda的API网关

时间:2017-04-09 06:37:36

标签: lambda aws-api-gateway aws-cognito serverless-architecture

我正在使用一个架构,我正在使用带有Cognito用户池授权程序的API网关,并且我从客户端ReST调用中传递了授权头中的IdToken。

工作正常。

我需要Lambda中的cognitoIdentityId。

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

内容类型 - application / json

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

它不会发送identityid(在事件或上下文中),也只会将我的有效负载转换为此json。

如何在我的负载完好无损的情况下获取Lambda中的identityid?

2 个答案:

答案 0 :(得分:4)

仅当您使用Cognito Identity Credentials时,Cognito Identity Id才可用。如果您想获取有关通过athorizer授权的Cognito用户池用户的信息,可以在 context.authorizer.claims 地图中找到它。

有关详细信息,请参阅this documentation

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

编辑修复拼写错误。

答案 1 :(得分:2)

CognitoIdentityId来自Federated Identity Pool。如果您需要identityId,则必须使用AWS Cognito Federated IdentitiesAWS Cognito User Pool中创建一个标识池。 Click here

然后,您需要对UserPool用户进行身份验证,该用户将返回JWT Tokens (IdToken, AccessToken and RefreshToken)。使用此IdToken,您可以调用Cognito Federated Identities API的{​​{3}}方法来获取IdentityId。