AWS Cognito的多租户身份验证

22

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

然而,业务需要 API 用户能够被归类到他们所属的客户公司,并且只能访问该客户公司的数据以及任何基于角色的认证。

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

我阅读的有关在 AWS 中执行此类操作的所有内容都建议为每个客户使用一个用户角色或池,并在创建时将用户与其关联,但我们不想这样做,因为客户通常由 2-3 个用户组成,而且有很多客户。这将很快变得难以维护,涉及太多用户池。

我尝试通过“传统”方法来解决这个问题,例如将专门设计用于通过调用用户微服务向每个请求添加客户端数据的域服务添加到架构中,但这似乎过于复杂。我还考虑改变架构,将每个微服务中的基本用户和角色信息包括在内,但这似乎很混乱。

我的问题是,是否有官方支持的方法可以通过编程方式向AWS Cognito配置文件添加数据,并以这种方式使客户端管理员在账户创建后能够通过前端网站进行更改,即使只是通过令牌中的clientId字段。

如果没有,那么有类似问题经验的人会推荐什么替代用户池建议呢。

谢谢。

编辑:

我也一直在调查使用Cognito配置文件上的属性进行此操作的几种方法,如此处所述。看起来这是实现我尝试实现的目标的方法,但我仍然想听听其他选择或建议。

1个回答

33
我们将使用自定义属性作为Cognito用户设置的一部分来解决此问题。我们将有文本字段用于附加属性或用户所属的组。
应该实现的方式可以在以下链接中找到:
- 通过自定义属性和Amazon Cognito管理SaaS身份 - 使用Amazon Cognito管理SaaS用户 - 使用Amazon Cognito进行SaaS身份验证和隔离(示例指南) - SaaS存储策略 这些数据将自动作为Cognito凭据的一部分传递到每个服务中,我们将能够检查用户是否具有访问特定于每个客户端的数据的有效凭据。
在NodeJS应用程序(有时使用Serverless)中使用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中用于后端身份验证。


这里还有一个潜在有用的资源;AWS re:INVENT 的演讲之一,由上面提到的快速入门的作者之一发表。这个演讲详细介绍了应用程序架构,不仅包括快速入门,还涉及一般的多租户身份验证。http://media.licdn.com/embeds/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FkmVUbngCyOw%3Ffeature%3Doembed&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DkmVUbngCyOw&type=text%2Fhtml&schema=youtube - John Dibling
快速入门的源代码在这里:https://github.com/aws-quickstart/saas-identity-cognito - John Dibling

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接