在API网关中基于认知身份池身份进行查找认知用户池使用

时间:2018-10-28 09:43:09

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

我是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。

1 个答案:

答案 0 :(得分:1)

您要注意,作为身份提供者的Cognito与作为用户池的Cognito不同。

  • 联合身份提供了一种使某人获得对您的AWS资源的识别访问权的方法。身份提供者为您提供的identity_id几乎可以被视为跟踪代码。 CIP(Congito [联合]身份提供程序)允许您通过任何数量的提供程序(不仅是用户池)登录,甚至根本不登录,从而获得身份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