11

故事:

我有一个包含用户的 Cognito 用户池。

此用户池是联合身份池中的身份验证提供程序。

我有一个 S3 存储桶,用户只能通过 Auth 角色上的策略上传到私有路径,如下所示:

arn:aws:s3:::BUCKET_NAME/${cognito-identity.amazonaws.com:sub}/*

用户通过 aws javascript sdk 直接从 Web 浏览器上传。

现在这很好用,我的用户仅限于他们上传的位置。他们上传的文件最终在存储桶中的路径如下所示:

us-east-1:0f26319c-1233-4c71-afb6-fac96a798ffb/random_file_name.txt

然后,我有一个 lambda,每当添加文件时都会从这个 S3 存储桶触发。为了澄清,用户不调用 lambda

问题:

我想从 lamda 访问用户池中的用户属性。我认为我可以使用 cognito-identity 子进行此查找。但是,我似乎找不到使用 SDK api 的方法来允许这样做。

使用此 api: http ://boto3.readthedocs.io/en/latest/reference/services/cognito-identity.html#CognitoIdentity.Client.describe_identity 我能够获得登录名/用户池,但不能获得与相关联的用户名此身份 ID。

如果我有用户名,那么我可以使用 api:http ://boto3.readthedocs.io/en/latest/reference/services/cognito-idp.html?highlight=cognito#CognitoIdentityProvider.Client.admin_get_user

任何想法如何使用联合身份 ID 来查找用户的属性?

4

2 回答 2

0

不幸的是,我不相信这是可能的。原因是,据我了解,从技术上讲,联合身份 ID 不必代表用户池用户。例如,如果您将其他身份验证提供程序连接到身份池,则用户可能具有完全不同的属性。

于 2020-03-31T17:39:39.140 回答
0

怎么把文件存进去
arn:aws:s3:::BUCKET_NAME/${cognito-idp.us-east-1.amazonaws.com:sub}

这将被解析为文件夹名称,例如
f4cfd4a8-0e94-4287-8c5e-1b01538dd2a1

使用Cognito 用户池中sub的这个用户,您可以使用该 sub 列出用户,例如在 cli 中:
aws cognito-idp list-users --user-pool-id=us-east-1_ndhjGJQYE --filter "sub = 'f4cfd4a8-0e94-4287-8c5e-example'"

于 2018-01-16T12:29:58.290 回答