是否可以找到给定的认知身份所属的用户(在用户池中)。在AWS控制台中?以编程方式?
在Cognito Identity Pool中,身份看起来像<region>:<guid>
。当这些身份来自Cognito用户池时,则在AWS控制台中,我们可以单击身份并访问某些信息。该信息仅限于DateCreated
和LinkedLogin=cognito-idp.<region>.amazonaws.com/<userpool_id>
,它只会告诉您此身份来自Cognito用户池和哪个池,但这远非实际有用。我们真的可以告诉用户池中的哪个用户吗?
答案 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。