Amazon web services Amazon Cognito:应用程序中的用户搜索功能

Amazon web services Amazon Cognito:应用程序中的用户搜索功能,amazon-web-services,authentication,aws-sdk,api-design,amazon-cognito,Amazon Web Services,Authentication,Aws Sdk,Api Design,Amazon Cognito,我已经阅读了可用的AWS Cognito文档,但我不确定我是否理解如何最好地实现“用户搜索”功能:我希望用户能够相互搜索并查看彼此的用户配置文件 两项具体要求: 用户只能搜索由自定义类型指定的所有用户的子集 用户可以通过自定义地理哈希属性进行搜索 如何最好地处理这个问题?我想我需要一个代理API服务,例如,AWS Cognito不支持按自定义属性进行搜索。但有很多问题: 我的代理Api应该使用什么AWS Api和身份验证方法来连接AWS Cognito服务 代理API是否应该尝试使用Cog

我已经阅读了可用的AWS Cognito文档,但我不确定我是否理解如何最好地实现“用户搜索”功能:我希望用户能够相互搜索并查看彼此的用户配置文件

两项具体要求:

  • 用户只能搜索由自定义类型指定的所有用户的子集
  • 用户可以通过自定义地理哈希属性进行搜索
如何最好地处理这个问题?我想我需要一个代理API服务,例如,AWS Cognito不支持按自定义属性进行搜索。但有很多问题:

  • 我的代理Api应该使用什么AWS Api和身份验证方法来连接AWS Cognito服务
  • 代理API是否应该尝试使用Cognito的同步功能来维护所有用户?不必要的风险
  • Cognito API是否默认启用SSL以便代理API可以安全连接
  • 我应该使用代理API吗

Cognito不会公开每个用户拥有的属性,所以我不确定这种方法是否能直接起作用。为了使用Cognito已经支持的功能实现这一目的,您必须镜像存储在别处的针对用户的属性,或者将您自己的钩子构建到客户端的更新调用中,或者通过Lambda。一个潜在的更简洁的方法是只存储那些您需要在别处搜索的自定义属性,并尽可能利用Cognito支持的功能

根据请求更新更具体的详细信息:

脑海中浮现出一个粗略的轮廓:

1) 客户端,一旦调用了更新属性,您将构建一个新的钩子来更新一些远程数据存储(Elastisearch、Dynamo等)

2) 这个数据存储可能应该由API网关支持,使用Cognoto访问令牌作为其周围的身份验证机制

3) 查询此数据存储的另一个API也可以内置到API网关中,使用相同的身份验证机制

4) 然后,查询将转到该API,并可以包装成存储所具有的任何语言或功能


有了它,您还可以根据谁有权访问什么构建自定义逻辑。

我使用了我创建的名为listUsersLambda的lambda函数和CognotCredentialServiceProvider.listUsers函数。令我惊讶的是,它列出了用户,但没有列出有助于某人确定他们是谁的属性——比如识别emailId以选择发送通知的用户,但至少我们可以通过用户名等选择congnito用户。

我同意:这正是我在问题中描述的解决方案。具有代理API,该API存储用户以允许搜索。但是你能谈谈我的问题吗?如何最好地解决这个问题?除了使用钩子或lambda函数来填充代理API之外,我还提出了一个更进一步的想法:使用sync特性。那怎么办?好的,我理解你的建议,我只是解释了一个你没有提到的方面,可能忽略了。您可以使用Dynamo/其他一些服务来镜像用户属性,使用cognito federated identity来直接接触这些属性,或者,更干净一点,使用API gateway来构建一个更智能的API,该API将与Dynamo一起工作,并直接使用联邦身份或用户池来验证该调用。谢谢,您在这里提到了很多优点,但现在它有点太浓缩了,我无法理解一切。你能不能修改一下你的回答,并用更结构化的方式解释一下,我很乐意接受。更新了我的回答。谢谢你的回答,我不确定我是否理解了所有的回答:你建议用“listUsers”列出所有cognito用户,然后过滤你真正想要返回的用户?基本上没有代理用户搜索服务,只是有一个代理功能,过滤所有用户的动态?最大的问题:“listUsers”不能一次返回超过1000个用户,因此您必须使用大量的用户群来执行许多请求。我认为使用lambda和admin函数是一个不错的选择。但我认为整个系统都很麻烦。