【问题标题】:Get CognitoId from Authenticated User从经过身份验证的用户获取 CognitoId
【发布时间】:2021-04-07 21:32:01
【问题描述】:

我正在使用 Amplify 框架将我的想法变为现实,到目前为止一切顺利,除了我坚持的一件事。

我让经过身份验证的用户将文件上传到 S3,我正在使用 Protected 访问级别,根据this,所有用户都可以读取受保护的,我已经设法上传文件并且在 Dynamo 表中保存一些信息。

存储文档说明如下:

受保护:所有用户均可读取,但只能由创建者写入 用户。文件存储在 protected/{user_identity_id}/ 下,其中 user_identity_id 对应于唯一的 Amazon Cognito 身份 ID 为该用户。

但是我无法匹配在受保护的 S3 中创建的 {user_identity_id} 与 Cognito 用户池中没有可用的信息,所以,我真的找不到知道哪些文件属于特定文件的方法用户,此外,我需要一种方法让我的 Admin 用户能够看到所有用户上传的文件。

另一方面,here,文档说可以通过传递 identityId 作为参数来检索文件,但是:

  • 如何检索特定用户的 IdentityId?
  • 如何根据 S3 中保存的 IdentityId 找到 CognitoUser?

我将不胜感激。

【问题讨论】:

  • 您需要的是 cognito 联合身份。然后将 cognito 用户池设置为经过身份验证的提供者。
  • 让我知道您是通过 API 还是 SDK 请求 s3?
  • @MahdiRidho 谢谢,如果联邦是指 Facebook 或 Google?然后不是,我使用的是认知身份池。对于 S3,我使用 aws-amplify 包,使用 Storage 类。
  • 不,有 2 个认知者。用户池和联合身份。用户池是管理用户认证层,它会生成一个基于 oauth2 的令牌(jwt)。联合身份是管理用户身份的角色。每个用户都应该是使用 AWS 服务的角色。您应该使用用户池设置身份验证身份提供者。
  • 因此,一旦登录成功并获得令牌,您将能够将令牌交换为 AWS 临时凭证作为身份验证身份角色。您可以根据定义的策略访问 AWS 服务

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


【解决方案1】:

嗯,我想知道你去哪里了。我从未使用过 AWS Amplify,但基本概念就像我上面提到的那样来生成 identityId。在图块上,它会是这样的:

IdentityId 是每个联合身份角色的唯一 ID,可以对未经身份验证的角色进行身份验证。我们将调用 CognitoIdentityCredentials 将令牌与 aws temp 凭证交换为经过身份验证的角色。用户拥有凭证后,他们将拥有包含 identityId 的 AWS.config.credentials。

回到您的问题,我找到了“Auth.currentUserCredentials()”方法来使用放大库获取用户身份 ID。示例:

let creds = await Auth.currentUserCredentials()
console.log(creds.identityId)

然后,根据放大文档,您可以通过示例检索您的 pretected s3:

Storage.list('photos/', { 
   level: 'protected', 
   identityId: creds.identityId
})
.then(result => console.log(result))
.catch(err => console.log(err));

【讨论】:

  • 谢谢@MahdiRidho。是的 Auth.currentUserCredentials() 符合我的目的。有了额外的逻辑,我将 IdentityId 保存在我的 User 表中,因为我需要一种方法来显示文件,不仅适用于经过身份验证的用户,还适用于管理员,这样我就可以显示每个用户上传的文件列表.
  • 顺便说一句,我可以说我缺少太多 AWS 概念知识,因为通过使用 amplify,只需运行几个 CLI 命令即可自动配置每个方面。
  • @arosgab 我在 4 年前通过此链接 docs.aws.amazon.com/sdk-for-javascript 开始了我的 AWS。现在已经更新到第3版了,我是第2版
猜你喜欢
  • 2018-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-04
  • 2018-06-13
  • 2011-05-07
  • 1970-01-01
相关资源
最近更新 更多