查找与Cognito Identity关联的用户

时间:2018-04-12 23:51:26

标签: amazon-web-services amazon-cognito aws-cognito

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

在Cognito Identity Pool中,身份看起来像<region>:<guid>。当这些身份来自Cognito用户池时,则在AWS控制台中,我们可以单击身份并访问某些信息。该信息仅限于DateCreatedLinkedLogin=cognito-idp.<region>.amazonaws.com/<userpool_id>,它只会告诉您此身份来自Cognito用户池和哪个池,但这远非实际有用。我们真的可以告诉用户池中的哪个用户吗?

2 个答案:

答案 0 :(得分:2)

在与AWS开发人员支持人员交谈后,我发现无法将Cognito Identity链接回Cognito用户池中的用户

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

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

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

答案 1 :(得分:0)

在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的标准Event结构。 (请参阅API Gateway Proxy Request Event)在线AWS文档中的lambda event payloads