使用 Amazon Cognito 用户池管理 SaaS 身份验证

文章重点

在这篇文章中,我们将深入探讨 Amazon Cognito 用户池如何在 SaaS 解决方案中实现多租户身份管理。文章将讲解不同的多租户模型及其优缺点从共享用户池到专用用户池,帮助读者根据特定需求选择合适的解决方案。

Amazon Cognito 是一项可扩展到数百万用户的客户身份及存取管理CIAM服务。尽管 Cognito 文档 详细介绍了可用的多租户模型,但确定何时使用每个模型有时可能会很具挑战性。在这篇博文中,我们将提供指导,说明何时使用每种模型,并回顾它们的优缺点,以帮助您作出明智的决策。

Cognito 概述

Amazon Cognito 负责网页及移动应用的用户身份管理及存取控制。透过 Cognito 用户池,您可以为应用添加注册、登入及存取控制功能。Cognito 用户池是一个用户目录,位于特定的 AWS 区域,让用户可以对应用进行身份验证和注册。此外,Cognito 用户池作为 OpenID ConnectOIDC身份提供者IdP。应用用户可以通过用户池直接登入或通过第三方 IdP 联邦登入。Cognito 成功验证后将发出用户池令牌,可用于安全访问后端 API 和资源。

Cognito 发出三种类型的令牌:

令牌类型描述ID 令牌包含用户身份声明,如姓名、电子邮件和电话号码。此类型的令牌用于验证用户并在应用和 API 门户中进行授权决策。访问令牌包含用户声明、群组及授权范围。此类型的令牌根据已验证的用户和应用权限授予对 API 操作的访问。刷新令牌当 ID 和访问令牌过期时检索新的令牌。访问和 ID 令牌的有效期较短,而刷新令牌则为长期有效。

多租户模型

软件即服务SaaS架构通常使用隔离、共享或桥接部署模型,这些也适用于像 Cognito 这样的 CIAM 服务。隔离模型将租户隔离在专用资源中,而共享模型则在租户之间共享资源。桥接模型则连接隔离和共享组件。本文将比较 Cognito 的隔离与共享模型,以便进行 SaaS 身份管理。

这些模型的细节在 AWS SaaS Lens 中进行了更详细的介绍。

模式1:使用自定义属性表示 SaaS 身份

要在 SaaS 应用程序中实现多租户,必须将租户上下文与用户身份关联。Cognito 拥有用户池属性 文档,这些属性用来表示身份。这些自定义属性可以用来保存有关用户与租户的关系,例如 tenantId。

通过使用自定义属性来实现多租户,您可以将每个用户的租户上下文存储在他们的用户档案中。当新用户注册时,可以将 tenantId 设置为表示用户属于哪个租户的值。

自定义属性需要在建立 Amazon Cognito 用户池时进行定义,最大可以建立 50 个自定义属性。这些自定义属性字段会在用户池中的每个用户档案中出现,但不会立即填充值。实际的租户属性值仅会在用户在用户池中创建后填充。

如图1所示,通过用户档案中的自定义租户属性值生成 Cognito ID 令牌。这些值可用于其他 AWS 业务的存取控制。

模式 2:共享用户池共享模型

单个共享的 Amazon Cognito 用户池简化了多租户 SaaS 应用的身份管理。所有租户的配置与更改可以在一个地方进行,从而减少管理开销。

优势在于只需设置一次用户特征,便可以在所有租户之间共享,并简化了新租户的新增过程。

共享模型的优缺点:

优势缺点使用单一共享用户池简化了入驻要求。共享池意味著设置如密码政策和 MFA 一致,无法根据租户自定义。租户使用相同的应用客户端和用户池进行身份验证。有些资源配额在用户池级别进行管理,需谨慎考虑配额。

模式3:基于组的多租户共享模型

Amazon Cognito 用户池允许管理员添加组,并将用户与组关联。这样可以引入特定属性如 cognitogroups 和 cognitoroles,这些属性可以在 ID 令牌中使用。这些组可以通过为每个租户创建单独的组来实现多租户,然后根据自定义的 tenantId 属性将用户分配到相应的租户组中。

模式4:每个租户的专用用户池隔离模型

为每个租户配置一个单独的用户池是另一种常见的多租户身份管理方法。虽然这种方法提供了最大的隔离性,但需要在应用中实现租户路由逻辑。

模式5:每个租户的应用客户端桥接模型

使用每个租户的单独应用客户端可以在单一用户池中获得更好的隔离。这种方法在一个用户池中启用每个租户的专属配置,但用户池级别的设置如密码策略仍然共享。

SaaS身份验证:使用Amazon Cognito用户池进行身份管理 安全博客

结论

在这篇博文中,我们探讨了 Amazon Cognito 用户池如何在 SaaS 解决方案中实现多租户身份。选择合适的模型取决于具体的租户需求及所需的配置灵活性。

如需进一步了解这些主题,可以参考 Cognito 开发者指南中的 常见 Amazon Cognito 场景。

如果您对这篇文章有任何反馈或问题,欢迎在下方评论区留言。

魔方加速器官网入口

订阅邮箱