CIAM 101: 认证、身份、单点登录(SSO)
Logto 因各种原因从 CIAM 开始(我们会在另一篇文章中讨论)。在开发过程中,我们意识到建立团队内部统一的理解会对我们将产品提升到下一个层次有帮助。我们希望这也能帮助你更好地理解 IAM 的全貌。
Logto 因各种原因从 CIAM 开始(我们会在另一篇文章中讨论)。在开发过程中,我们意识到建立团队内部统一的理解会对我们将产品提升到下一个层次有帮助。我们希望这也能帮助你更好地理解 IAM 的全貌。
我开始构建 Logto 是因为我注意到身份和访问管理(IAM)随着时间的推移变得越来越复杂和庞大。IAM 的概念甚至足够大,以至于引出了新的概念,例如 WIAM(工作团队 IAM)和 CIAM(客户 IAM)。
虽然 WIAM 和 CIAM 共享相同的基础,但它们有不同的用例:WIAM 通常用于内部用户,而 CIAM 用于外部客户。 一些例子:
Logto 因各种原因从 CIAM 开始(我们会在另一篇文章中讨论)。在开发过程中,我们意识到建立团队内部统一的理解会对我们将产品提升到下一个层次有帮助。我们希望这也能帮助你更好地理解 IAM 的全貌。
让我们开始吧!
在本文中,我们将重点关注 CIAM 的基本概念以及我们可能在认证流程中或之后遇到的问题。我们还将讨论单点登录(SSO)及其相关场景。
💡 认证最初定义为“你是谁?”。然而,当讨论数字身份时,证明身份所有权更为准确。正如 Calm-Card-2424 所言。
如果你发现一些不属于这两个类别的东西,那它很可能不是身份业务中必需的。
身份通常代表用户或机器。成功认证后,会发放一个 ID Token 作为身份。
换句话说,认证的主要目的是获取一个身份。
租户是一组身份:
当我们讨论“多租户”时,我们指的是多个 Logto 实例,它们的身份相互隔离。换句话说,就是多个 Logto 实例。
注意,它有两个独立的身份系统,即使是相同的标识符(电子邮件、电话等),你也不能在租户 1 中使用租户 2 的身份。这就像你的 Costco 会员资格在 Whole Foods 无效一样。
就像身份一样,应用也属于一个租户。要记住的几件事:
这两个提供者之间的区别棘手但重要。
你可以从 Google 中找到各种关于服务提供者的解释,尽管它们可能不那么令人满意。在我看来,服务提供者是一个相对的概念:
考虑一个典型的社交登录场景:
❓ 在这个图中有多少服务提供者和身份提供者?
答案
两者都有两个。iOS App 对 Logto 来说是服务提供者,而 Logto 是身份提供者。Logto 对 GitHub 来说是服务提供者,而 GitHub 是身份提供者。因此,Logto 既是服务提供者也是身份提供者。
你是一家技术解决方案公司的 CTO,你有超过 100 个业务合作伙伴,并交付了超过 300 个项目。
❓ Logto(或 CIAM 产品)如何提供帮助?
为每个业务合作伙伴创建一个 Logto 实例。每个伙伴持有一个租户。项目映射到 Logto 中的“应用”。
Logto 提供一个在租户内的统一登录体验(即 SSO),因此用户在访问同一租户中的其他应用时,无需再次登录。
我们发现“SSO”这个术语常常引起混淆。我们认为单点登录(SSO)是一种行为,而不是一个业务概念。因此,SSO 与“WIAM 中的 SSO”不等同。
当我们说“需要 SSO”时,它可能指以下情况之一:
👉🏽 在一家大公司,员工使用相同的凭据登录所有公司授权的资源(如电子邮件、即时通讯、云服务等)。
这是一种典型的 WIAM 场景。在这种情况下,只有一个身份提供者涉及。我们现在不关心。
👉🏽 最终用户使用相同的凭据登录同一公司开发的所有服务(如 GSuite)。
Logto 目前专注于上述方法。可能存在多个外部身份提供者,例如第三方社交登录提供者,彼此独立且无关联。
尽管如此,Logto 仍然是身份的唯一真实来源,只是从其他提供者那里“借用”它们。在这种情况下,Logto 既是身份提供者(对 GSuite 应用来说),也是服务提供者(对外部身份提供者而言)。
👉🏽 最终用户只能使用特定电子邮件域内的身份提供者完成认证。例如,用 Google Workspace 登录 Figma。
这是最常见的 CIAM 中的 SSO 用例。让我们更仔细地看看。
如果我们想使用 @silverhand.io 邮箱登录 Figma,可以使用社交登录或 SSO。下图说明了两者之间的区别:
社交登录
SSO
用语言描述:
在这种情况下,Logto 是身份提供者和服务提供者。看来 SSO 比普通登录过程更复杂。对身份拥有者有什么好处呢?
🤔 聪明的你一定注意到了,这实际上是从 SaaS 角度来看SSO 情况 1。
是时候讨论 SSO 图中的“X”了。这表示 Figma 连接邮箱域到特定身份提供者的过程。那么,它是如何工作的呢?
由于请求通常来自企业客户,我们将“SSO 情况 3”中的过程称为“企业 SSO”以明确。
我们可以轻松设计一个简单的解决方案:创建一个邮箱域和 SSO 方法之间的映射,然后手动更新它。
过程“X”的动作现在很清楚:
🔍 找到给定邮件域的映射企业 SSO 方法
因此,如果你将 silverhand.io 配置为有效的邮箱域,与 Google Workspace SSO URL 相连,那么尝试使用 @silverhand.io 邮箱登录的用户将被重定向到相应的 Google Workspace 登录页面,而不是在站点内处理。
当你只有几十个需要企业 SSO 的客户时,手动管理映射还可以。然而,还有更多考虑因素:
还有很多。由于几乎所有企业 SSO 都基于邮件域,因此我们可以很快找到一个更好的解决方案:
此解决方案解决了前两个问题:
1. 如果有数百甚至数千个企业 SSO 客户呢?
2. “普通用户”和“企业 SSO 用户”之间有什么关系?
至于第三个问题:
3. 应否在不同的企业 SSO 客户之间隔离数据?
我们提到了使用电子邮件域来识别要使用的特定企业 SSO 方法;换句话说,为特定批量的用户应用特定处理。
然而,客户的需求通常不只是企业 SSO,例如上节中的问题 4 和 5。多年来,出色的 SaaS 公司开发了一个成熟的模型来解决这些问题:组织。
组织规则
你可能会看到其他术语,如“工作空间”、“团队”,甚至“租户”在软件中使用。要判断它是否是我们在讨论的概念,只需检查它是否代表“一组身份”。
在本文中,我们将使用“组织”一词以保持一致。
在 Notion 中,你可以创建和加入多个工作空间(即组织),使用相同的邮箱地址并轻松地在它们之间切换。
对于 Slack,它看起来是一样的,但我们怀疑背后使用不同的身份,因为我们需要为每个工作空间创建一个新账号。

Slack 工作空间

Notion 工作空间
Notion 有一个“个人计划”可用,它通常是表面上的一个组织,且里面只有唯一的用户(你)。我们不知道 Notion 的确切实施,但这解释是合理的,并在我们的模型中实现。每个组织也有一个标识符,通常被称为“组织域”。
❓ 一个应用可以与一个组织关联吗?
答案
是的,是的。如我们在开头讨论的,一个应用可以有一个身份。你能举例说明这样的业务场景吗?
3. 应该在不同的企业 SSO 客户之间隔离数据吗?
4. 是否需要为企业 SSO 管理员提供一个仪表板,以查看活跃用户、审核日志等?
5. 当用户从企业 SSO 身份提供者中删除时,如何自动停用账号?
我们介绍了几个概念:认证 (AuthN)、授权 (AuthZ)、身份、租户、应用程序、身份提供者 (IdP)、服务提供者 (SP)、单点登录 (SSO) 和企业 SSO (组织)。理解它们可能需要一点时间。
在写这篇文章时,我注意到有趣的是,在线服务中最昂贵的计划通常包括与授权相关的专属功能,这在本文中被完全忽略了。你可能已经对授权产生了一些疑问,比如: