使用 AWS Cognito 进行多租户身份验证

Multi-Tenant Authentication with AWS Cognito

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

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

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

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

我尝试使用 "conventional" 方法想办法解决这个问题,例如将域服务添加到架构中,该架构专门用于通过调用用户微服务,但这似乎过于复杂。我也考虑过更改架构以在每个微服务中包含基本的用户和角色信息,但这看起来很乱。

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

如果没有,那么遇到过类似问题的人会推荐什么来替代用户池建议。

谢谢。

编辑:

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

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

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

通过将此数据作为 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 package, which is primarily designed for front-end authentication, but which can be used in NodeJS for back-end authentication as specified here.

最容易实现的