【问题标题】:API Gateway with Cognito User Pool Authorizer and Lambda具有 Cognito 用户池授权方和 Lambda 的 API 网关
【发布时间】:2017-09-04 08:29:33
【问题描述】:

我有一个架构,其中我将 API 网关与 Cognito 用户池授权器一起使用,并且我正在从客户端 ReST 调用传递授权标头中的 IdToken。

一切正常。

我需要 Lambda 中的 cognitoIdentityId。

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

内容类型 - 应用程序/json

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

它不发送身份标识(在事件或上下文中),而且它只将我的有效负载转换为这个 json。

如何在我的有效载荷完好无损的情况下在这种情况下获取 Lambda 中的身份标识?

【问题讨论】:

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


    【解决方案1】:

    只有在您使用 Cognito 身份凭证时,才能使用 Cognito 身份 ID。如果您想获取有关通过 ahorizer 授权的 Cognito 用户池用户的信息,可以在 context.authorizer.claims 映射中获得。

    更多详情请见this documentation。

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

    已编辑以修正错字。

    【讨论】:

    • 在设置代理集成后,我将 event.requestContext.identity.cognitoIdentityId 设为 null。虽然我在授权人中获得了其他值,例如电子邮件、子、aud 等。好吧,我只是在邮递员的 Authorization 标头中传递 idToken。而且我不打算将任何客户端 AWS-SDK 用于 cognito。我的设置如本论坛帖子中所述:forums.aws.amazon.com/thread.jspa?threadID=252838 我的目标是获取 identityId,以便我可以从 cognitoidentity 中的 getCredentialsForIdentity 获取临时 secretKey 和 accessKey。
    • 同样,如果您使用的是 Cognito 用户池授权器,则永远不会填充 cognitoIdentityId。
    • 那么如何用这个架构获取identityId呢?或者如何通过这种方式获取临时的secretKey和accessKey?我只是好奇-为什么你们限制我们-“如果您使用的是 Cognito 用户池授权器,那么 cognitoIdentityId 将永远不会被填充”?
    • 这是 Cognito 的限制,而不是 API Gateway。如果您只是使用 Cognito 用户池,则没有 identityId。仅当您实际使用联合身份功能时才使用 IdentityId。 docs.aws.amazon.com/cognito/latest/developerguide/…
    • 我只是尝试将我的 API Gateway 资源转换为代理集成 - 结果证明这种类型无法响应。我正在使用 Cognito 联合身份 - 那么如何将 Cognito ID 获取到我的 lambda?
    【解决方案2】:

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

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

    【讨论】:

    • 但是无法通过一些集成请求映射模板为我的 lambda 获取 Cognito ID?
    猜你喜欢
    • 2017-10-25
    • 2018-11-19
    • 2018-01-24
    • 2019-11-18
    • 2022-11-10
    • 2020-11-27
    • 2020-03-31
    • 2019-11-07
    • 2018-01-12
    相关资源
    最近更新 更多