Amazon web services 查找与Cognito标识关联的用户

Amazon web services 查找与Cognito标识关联的用户,amazon-web-services,amazon-cognito,aws-cognito,Amazon Web Services,Amazon Cognito,Aws Cognito,是否有可能找到给定cognito标识所属的用户(在用户池中)。在AWS控制台中?以编程方式 在Cognito标识池中,标识看起来像:。当这些身份来自Cognito用户池时,在AWS控制台中,我们可以单击该身份并访问一些信息。该信息仅限于DateCreated和LinkedLogin=cognito idp..amazonaws.com/,它只告诉您该标识来自cognito用户池和哪个池,但这远没有实际用处。我们是否可以实际说出用户池中的哪个用户?在node.js lambda的上下文中,我可以通

是否有可能找到给定cognito标识所属的用户(在用户池中)。在AWS控制台中?以编程方式


在Cognito标识池中,标识看起来像
。当这些身份来自Cognito用户池时,在AWS控制台中,我们可以单击该身份并访问一些信息。该信息仅限于
DateCreated
LinkedLogin=cognito idp..amazonaws.com/
,它只告诉您该标识来自cognito用户池和哪个池,但这远没有实际用处。我们是否可以实际说出用户池中的哪个用户?

在node.js lambda的上下文中,我可以通过以下方式获得用户池标识:

function getAuthenticatedUser(env, event) {
    let cognitoClient = 
        new AWS.CognitoIdentityServiceProvider(env.cognito.region);

    let userSub = event.requestContext.identity
        .cognitoAuthenticationProvider.split(':CognitoSignIn:')[1];

    let request = {
        UserPoolId: env.cognito.userPoolId,
        Filter: `sub = "${userSub}"`,
        Limit: 1
    };

    console.log(JSON.stringify(request, null, 2));
    return cognitoClient.listUsers(request).promise()
        .then((data) => {
            console.log('Cognito users list...');
            console.log(JSON.stringify(data,null,2));
            return data.Users[0]
        });
}

其中
event
是执行时传递到lambda的标准事件结构。(请参阅上的在线AWS文档中的)。

在与AWS开发人员支持人员交谈后,我发现不可能将Cognito标识链接回Cognito用户池中的用户

因此,如果您需要知道后端代表哪个用户执行代码,在lambda中,您可以选择以下选项:

  • 在请求中发送用户信息。即使lambda调用使用Cognito标识进行了身份验证,并且lambda可以访问lambda上下文中的标识,如果您想要用户信息,您需要自己发送它。例如,在请求中发送ID令牌,在服务器端验证它,并从中提取用户信息

  • 使用Cognito Sync为您的Cognito身份创建数据集。在数据集中存储一些用户信息


查看node.js的lambda文档(),lambda函数似乎有两个参数,第一个是事件,第二个是上下文。上下文数据类型的文档与“env”的用法不匹配,这让我很困惑。您的函数看起来不像node.js lambda。。。有趣的是,在客户机和lambda之间使用API网关将requestContext添加到lambda的事件中,并且requestContext包含“sub”。如果您的客户机直接调用lambda,您就不会得到这个结果。这实际上是我从lambda的主体调用的一个函数-env是一个用环境变量填充的变量,我已将环境变量加密到一个文件中,用lambda源压缩,然后使用AWS KMS(密钥管理服务)在lambda执行时解密。我提供此方法作为如何从Cognoto联邦身份获取Cognoto用户池用户的示例。我传递给这个方法的
event
变量与作为参数传递给lambda入口点的
event
变量非常相似。好的,谢谢。但这并不能真正解决我的问题,您的答案是能够从用户池中获取用户,因为您将用户信息作为lambda请求的一部分发送(即,在请求中您有usersub)。我的问题是,如果你只有一个cognito身份,你能做什么来找出它属于谁。在与AWS支持人员交谈后,他们告诉我不可能将身份链接回用户。明白-我的大多数用例都涉及与API网关或AppSync一起实现的lambda,因此在这些情况下,
事件
结构中至少有足够的元数据来执行上述操作。。。对不起,我帮不上忙了。