查找与 Cognito 身份关联的用户

Finding user associated with a Cognito Identity

是否可以找到给定认知身份属于哪个用户(在用户池中)。在 AWS 控制台中?以编程方式 ?

在 Cognito 身份池中,身份看起来像 <region>:<guid>。当这些身份来自 Cognito 用户池时,然后在 AWS 控制台中,我们可以单击该身份并访问一些信息。该信息仅限于 DateCreatedLinkedLogin=cognito-idp.<region>.amazonaws.com/<userpool_id>,它们仅告诉您此身份来自 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 的标准事件结构。 (参见API Gateway Proxy Request Event in the online AWS documentation on lambda event payloads)。

在与 AWS 开发人员支持人员交谈后,我发现无法link将 Cognito 身份返回给 Cognito 用户池中的用户

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

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

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