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

Posted

技术标签:

【中文标题】使用 AWS Cognito 进行多租户身份验证【英文标题】:Multi-Tenant Authentication with AWS Cognito 【发布时间】:2018-12-19 07:20:51 【问题描述】:

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

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

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

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

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

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

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

谢谢。

编辑:

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

【问题讨论】:

【参考方案1】:

我们将用于此问题的解决方案是使用自定义属性作为 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 的后端身份验证。

【讨论】:

这里还有一个可能有用的资源;由上述快速入门的一位作者发表的 AWS re:INVENT 演讲。本演讲不仅详细介绍了快速入门的应用程序架构,还详细介绍了多租户身份验证。 media.licdn.com/embeds/… 快速入门的源代码在这里:github.com/aws-quickstart/saas-identity-cognito

以上是关于使用 AWS Cognito 进行多租户身份验证的主要内容,如果未能解决你的问题,请参考以下文章

在自定义函数中使用 AWS cognito 多因素身份验证

AWS Amplify (AppSync + Cognito) 使用每个组织/租户的动态组进行授权

使用 AWS cognito 进行匿名身份验证

R使用AWS Cognito进行Shiny身份验证

我可以使用 AWS Cognito 进行 Ejabberd 服务器身份验证吗?

尝试通过 AWS 应用程序负载均衡器和 Cognito 进行身份验证时出现 500 错误