正如您所注意到的,作为身份提供者的 Cognito 与作为用户池的 Cognito 不同。
Federated Identities 提供了一种方法,可让已识别的人访问您的 AWS 资源。identity_id
身份提供者给你的几乎可以被认为是一个跟踪代码。CIP(Congito [Federated] Identity Provider)允许您通过通过任意数量的提供者(不仅仅是用户池)登录,甚至根本不登录来获取身份 ID。
用户池为您提供了一种管理应用程序用户的方式(即一组用户名、电子邮件、密码等)。
这就是从identity_id
用户池用户返回很难的原因(因为不能保证它是用户池用户,很可能是 Facebook 的某个人)。
但是,从您所说的来看,identity_id
来自 UserPool 身份验证的假设是安全的。这意味着您有两个选择:
官方的方法是使用identity:GetOpenIdToken将identity_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