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

时间:2018-07-11 09:46:40

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

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

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

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

我所读到的有关在AWS中执行类似操作的所有建议都建议每个客户端使用一个用户角色或池,并在创建用户时将其与用户相关联,但是我们不希望这样做,因为客户端通常由2-组成3个用户,并且有很多客户端。就用户池数量而言,这将很快变得难以维持。

我试图使用“常规”方式思考解决此问题的方法,例如将域服务添加到体系结构中,该域服务旨在将特定用户通过调用用户微服务来向每个请求添加客户端数据,但是这似乎过于复杂。我还考虑过更改架构,以在每个微服务中包括基本用户和角色信息,但这似乎很麻烦。

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

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

谢谢。

编辑:

我还一直在研究使用Cognito个人资料中的属性来执行此操作的几种方法,如here所述。似乎这是或多或少地实现我想要达到的目标的方法,但是我仍然希望听到有关替代方案或建议的信息。

1 个答案:

答案 0 :(得分:12)

我们将用于此问题的解决方案是将自定义属性用作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软件包似乎最容易实现,该软件包主要用于前端身份验证,但可以在NodeJS中用于here指定的后端身份验证。