gpt4 book ai didi

amazon-web-services - 在 Lambda 函数中获取 Cognito 用户池组数据

转载 作者:行者123 更新时间:2023-12-03 20:30:03 25 4
gpt4 key购买 nike

我在 AWS 中使用 Cognito 用户池进行身份验证。当授权用户访问 API 时,我想获取用户所在的 Cognito 用户池组。我尝试过很多方法,比如

{
"role" : "$context.identity.role",
}


{
"arn": $context.identity.userArn
}

(以上只是我试过的例子)

但是,我以空字符串的形式获取数据。请帮我解决这个问题。

谢谢...

最佳答案

这可以使用 AWS 开发工具包中的 Cognito 身份服务提供商来实现。

您可以从 event.requestContext.identity.cognitoAuthenticationProvider 检索用户子(主题),如下所示:

let userSub = event.requestContext.identity.cognitoAuthenticationProvider.split('CognitoSignIn:')[1]
let UserPoolId = event.requestContext.identity.cognitoAuthenticationProvider.split(',')[0].split('/')[1]

您可以将其与用户池 ID 一起使用,用户池 ID 也可以从 Cognito 身份服务提供商的 listUsers 函数中的上述值中提取,以检索用户用户名:
let userParams = {
UserPoolId,
Filter: 'sub=\"' + userSub + '\"',
Limit: 1
}

try {
const users = await cognitoISP.listUsers(userParams).promise()
Username = users.Users[0].Username
} catch (e) {
// Handle your error
}

见: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityServiceProvider.html#listUsers-property

然后,此用户名和用户池 ID 将与 Cognito 身份服务提供商的 adminListGroupsForUser 函数一起使用,以检索用户所属的组数组:
 try {
let data = await cognitoISP.adminListGroupsForUser({
UserPoolId,
Username
}).promise()
groups = data.Groups
} catch (e) {
// Handle your error
}

见: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityServiceProvider.html#adminListGroupsForUser-property

您的 lambda 函数需要能够访问您的 Cognito 用户池中的以下内容:
- cognito-idp:ListUsers
- cognito-idp:AdminListGroupsForUser

见: https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/index.html

关于amazon-web-services - 在 Lambda 函数中获取 Cognito 用户池组数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50829843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com