amazon-web-services - 使用 AWS Cognito 进行 Multi-Tenancy 身份验证

标签 amazon-web-services authentication microservices multi-tenant aws-cognito

我目前的项目是在 AWS 中,使用 Cognito 和带有 Lambda 的微服务。我们已经使用 DDD 设计了微服务,并且正在实现基本功能。

但是,API 的用户存在业务需求,以便能够归类到他们工作的客户公司,并且只能访问该客户公司的数据以及我们将拥有的任何基于角色的身份验证。

这不是一个完整的 Multi-Tenancy 解决方案,因为每个用户都将使用同一个网站,但他们的帐户将与特定客户相关联。

我读到的关于在 AWS 中执行此类操作的所有内容都建议为每个客户端使用一个用户角色或池,并在创建用户时将用户与其关联,但是我们不想这样做,因为客户端通常由 2-3 个用户和有很多客户。就用户池的数量而言,这将很快变得无法维护。

我尝试使用“常规”手段来思考解决此问题的方法,例如将域服务添加到架构中,该架构专门用于通过调用用户微服务将客户端数据添加到特定用户的每个请求中,但这似乎过于复杂的。我还考虑过更改架构以在每个微服务中包含基本的用户和角色信息,但这似乎很困惑。

我的问题是,是否有任何官方支持的方式以编程方式将数据添加到 AWS Cognito 配置文件中,并且在创建帐户后,客户端管理员可以通过前端网站进行更改?即使它只是 token 中的 clientId 字段。

如果不是,那么任何经历过类似问题的人会推荐什么来替代用户池建议。

谢谢你。

编辑:

here 所述,我还一直在研究使用 Cognito 配置文件上的属性来执行此操作的几种方法。 .似乎这是或多或少地做我想要实现的事情的方法,但我仍然想听听替代方案或建议。

最佳答案

我们将用于此问题的解决方案是使用自定义属性作为 Cognito 用户设置的一部分。我们将为用户所属的其他属性或组提供文本字段。

可以在以下链接中找到应该实现的方式:

  • Managing SaaS Identity Through Custom Attributes and Amazon Cognito
  • Managing SaaS Users with Amazon Cognito
  • SaaS identity and isolation with Amazon Cognito (Example Guide)
  • SaaS Storage Strategies

  • 随着这些数据作为 Cognito 凭证的一部分自动传递到每个服务中,我们将能够检查用户是否具有访问特定于每个客户端的数据的有效凭证。

    如何在 NodeJS 应用程序(有时使用无服务器)中使用 Cognito 的示例包括:

    https://serverless-stack.com/chapters/login-with-aws-cognito.html

    https://serverless-stack.com/chapters/add-a-create-note-api.html#configure-the-api-endpoint

    这似乎最容易通过使用 aws-amplify 来实现。包,主要用于前端认证,但可以在NodeJS中用于指定的后端认证here .

    关于amazon-web-services - 使用 AWS Cognito 进行 Multi-Tenancy 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51282283/

    相关文章:

    ruby-on-rails - 在 AWS Elastic Beanstalk 中使用 Resque 和/或 Redis 部署 Rails

    amazon-web-services - 使用 Chef 以编程方式查找 AWS 公共(public) DNS

    node.js - NodeJs 身份验证???

    java - 在均匀采购模式中处理状态更新

    python - 使用 AWS API 网关触发在 EC2 实例上运行的 python 脚本并传递参数

    .net - 没有客户端证书的 WCF 消息/方法安全性

    authentication - 控制 cookie 生命周期的三个属性中哪个优先?

    node.js - 用于微服务的 REST 消息传递层是否足够快?

    测试微服务?

    ios - DynamoDB 自增 ID 和服务器时间(iOS SDK)