【问题标题】:Lookup cognito userpool uset based on cognito dentity pool identity in API GatewayAPI Gateway 中基于 cognito 身份池标识查找 cognito 用户池用户
【发布时间】:2019-04-01 11:30:39
【问题描述】:

我是 AWS 新手,所以请放轻松 :) 我已经设置了一个概念证明来证明一个由 lambda 支持的经过身份验证的 API,其中包含以下组件。

API 网关 -> 由 Lambda 支持 由 AWS Cognito UserPool 支持的联合身份 我在 API 网关中设置了授权方以使用联合身份池提供的 IAM 角色。

我可以看到来自 https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#context-variable-reference 的身份 (ap-southeast-2:<GUID>) 进入网关(在我的集成请求映射模板 "$context.identity.cognitoIdentityId" 中使用它)

如何通过网关或 lambda 将 'ap-southeast-2:<GUID>' 解析回驻留在用户池中的源身份。 (例如,从中提取自定义属性之一)

如果相关的其他信息,我正在使用 Amplify-AWS 让客户端调用 API 网关。

TIA。

【问题讨论】:

    标签: amazon-web-services aws-api-gateway amazon-cognito aws-userpools


    【解决方案1】:

    如您所见,作为身份提供者的 Cognito 与作为用户池的 Cognito 不同。

    • 联合身份提供了一种方法,可让已识别的人访问您的 AWS 资源。身份提供者给你的identity_id 几乎可以被认为是一个跟踪代码。 CIP(Congito [Federated] Identity Provider)允许您通过通过任意数量的提供者(不仅仅是用户池)登录,甚至根本不登录来获取身份 ID。

    • 用户池为您提供了一种管理应用程序用户的方式(即一组用户名、电子邮件、密码等)。

    这就是从identity_id 回到用户池用户很难的原因(因为不能保证它用户池用户,很可能是 Facebook 的某个人)。

    但是,根据您所说,identity_id 来自 UserPool 身份验证的假设是安全的。这意味着您有两种选择:

    官方的方式是使用identity:GetOpenIdTokenidentity_id(可以忽略请求中的logins部分)转换为OpenId令牌。然后,您可以将此令牌用于userpools:GetUser 端点。这里有一些陷阱,例如确保您使用允许您查看所有您关心的属性的范围进行身份验证。

    然而,奇怪的是,cognitoAuthenticationProvider 的值不是不透明的,并且可以(非官方)被解码:

      // Cognito authentication provider looks like:
      // cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxxxxxxx,cognito-idp.us-east-1.amazonaws.com/us-east-1_aaaaaaaaa:CognitoSignIn:qqqqqqqq-1111-2222-3333-rrrrrrrrrrrr
      // Where us-east-1_aaaaaaaaa is the User Pool id
      // And qqqqqqqq-1111-2222-3333-rrrrrrrrrrrr is the User Pool User Id
    

    上面的例子,关于如何使用userpools:AdminGetUser的更多细节可以在这里找到:https://serverless-stack.com/chapters/mapping-cognito-identity-id-and-user-pool-id.html

    【讨论】:

    • 感谢@thomasmichaelwallace 的详细解释。这让我问了一个问题,为什么我什至使用联合身份,什么时候我可以回退到从用户池生成的访问令牌并拥有一个 UserPool 身份验证器来保护 api 网关。
    • 我们刚刚在我们自己的东西上推出了 cognito,我最终只使用了 UserPools。
    猜你喜欢
    • 2020-04-21
    • 2018-02-11
    • 2017-10-25
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 2019-03-14
    • 2018-07-17
    相关资源
    最近更新 更多