【问题标题】:AWS Cognito / Getting user information from the subAWS Cognito / 从 sub 获取用户信息
【发布时间】:2019-10-18 08:53:38
【问题描述】:

我有一个使用 AWS Cognito AWSMobileClient 的有效 iOS 应用程序,用户可以在其中使用 AWSAuthUI 登录和登录/注销。

接下来我想做的是:从另一个用户那里获得一个子(例如 7y873ff7-.....u9h4k)我想从另一个用户那里获取信息。

在网上搜索后,我似乎需要使用名为 ListUsers 的东西,但我不是 100% 有信心。任何人都可以确认这一点并给我一些关于我需要如何去做我想做的事情的提示吗?知道我正在使用 Swift。

......稍后更新帖子.......

以下是我在网上找到的示例;这是我整理的一些代码,作为开始的试验。

let getUsersRequest = AWSCognitoIdentityProviderListUsersRequest()

getUsersRequest?.attributesToGet = ["email"]
getUsersRequest?.userPoolId = "MY-POOL-ID"
getUsersRequest?.filter = "sub = \"SOME-USER-SUB\""

AWSCognitoIdentityProvider(forKey: "MY-POOL-ID").listUsers(getUsersRequest!,completionHandler: {
    (response, error) in
    print("OK, Here we are!")
})

但我从未看到消息:好的,我们到了!

所以我一定是做错了什么。当然 MY-POOL-ID 和 SOME-USER-SUB 是我从 AWS 控制台获取的真实数据。

【问题讨论】:

  • 你得到什么错误?用户是否有权调用 ListUsers?您是否设置了具有适当角色的身份池?
  • 阅读我的帖子,您可以看到我什至没有达到有机会打印错误的地步(否则将打印消息......我会检查可能的错误)。对于您的第二个问题....变得有趣:这可能是我开始搞砸的地方。我需要什么才能让用户被授权调用 ListUsers?您指的正确角色是什么?
  • 这是一个 API,你应该得到某种答案。至少有一个 HTTP 代码,200、401、403 之类的。无论如何,更新我的答案。
  • 好吧,好吧;那我做错了什么?

标签: swift amazon-web-services authentication amazon-cognito


【解决方案1】:

您确实会使用ListUsers API。

Here 是它的 AWS iOS SDK 文档。您可以应用的过滤器之一是“sub”。

调用ListUsers 的用户必须分配一个角色,该角色将授予其访问该API 的权限。看看 this AWS blog post 的 JS 示例。

但是,您不能让每个人都列出池中的所有用户,这将是一个巨大的安全漏洞。列出所有用户的权限应保留给应用程序管理员,并且仅在需要时。相反,您可以在 AWS 上设置一个通过 API Gateway 调用的 Lambda 函数。该函数将 sdb 作为输入并返回电子邮件地址。附加到该函数的角色将使其有权为您的池调用 ListUsers。这将限制您的用户可以获得的关于其他人的信息量,但您的 Lambda 仍应运行检查以确保它没有被滥用。例如,如果用户 X 想要获取用户 Y 的电子邮件地址,则用户 Y 应该事先批准。

我不了解您的用例,但总的来说,允许任何人获取有关您应用的任何用户的信息都应该谨慎行事。用户之间的任何交互都应该对他们透明并得到同意。请记住,如果用户可以找到应用程序 ID 和秘密令牌,他们可以从您的应用程序外部登录到 Cognito。在授予用户访问任何内容的权限时,请考虑如何滥用它。您可能会意识到您应该重新考虑如何解决问题。

【讨论】:

  • 好的,谢谢。你提到的第一个链接我已经找到了,而不是第二个。但两者都不是很有帮助,因为它们没有提供有关如何使用 API 的示例。例如,如果我首先实例化一个 AWSCognitoIdentityProviderListUsersRequest 类型的对象(为了尝试某些东西),我收到的第一条消息是“未解析的标识符”,这意味着我在某些时候没有使用正确的导入(或 pod)。这些文件有很多不成文的假设,对“已经知道”的人非常有用,对我们其他人来说则不然。
  • 假设您缺少调用 ListUsers 的授权,请参阅更新后的答案。如果您不熟悉 Lambda、API 网关和身份池,那么正确操作将涉及大量工作。您可能需要考虑其他路径。
  • 我开始阅读您提到的博客。虽然不完全。顺便说一句:允许访问用户列表与允许访问 dynamoDB 表是否相同? .....我的印象是使用 Lambda 函数。我的用例是我想让 2 个用户根据需要连接在一起。
  • 原理一样,没错。它归结为让用户访问 API。与 DynamoDB 的交互是通过 API 调用完成的。在我看来,您在 IAM 权限、API 网关和 Lambda 函数方面有很多工作要做。遵循课程可能是个好主意。也许看看 AWS Amplify。如果您更愿意专注于移动应用程序方面,或者找一个可以为您设置这些东西的人。这是很多需要学习的活动部分。或者找到一种不同的、更简单的方法来做到这一点。就像,如果你想要的只是用户交换电子邮件,让他们互相发消息。
  • 嗯,是的,但学习并不是我不喜欢的事情。而且我已经掌握了 AWS 上的一些东西。一个问题是,AWS 字典中似乎不存在“简单”一词。此外,如果您有一些关于 AWS Amplify 的建议教程,我会很高兴。
猜你喜欢
  • 2016-10-22
  • 2019-12-23
  • 2020-12-25
  • 2019-05-20
  • 2020-08-21
  • 2018-09-18
  • 1970-01-01
  • 2017-10-03
  • 2019-02-27
相关资源
最近更新 更多