为何单点登录 (SSO) 更好?
单点登录 (SSO) 是一种简化身份验证模型并改善每个应用用户体验的绝佳方式。以下是原因。
单点登录 (SSO) 是一种技术,允许用户一次身份验证即可访问多个应用程序。如果你只有一个应用程序,这听起来可能有些小题大做。然而,从一开始就使用 SSO 可以避免未来的许多麻烦,实现单点登录也比你想象的要容易。
在我们开始之前,需要注意的是有两种类型的单点登录:
- 第一种类型是你有多个应用程序共享同一个用户数据库。这是我们将在本文中讨论的类型。
- 第二种类型是当你的客户有一个集中式身份提供者(IdP),并且你需要与其集成。这超出了本文讨论的范围。
为什么选择 SSO?
简化身份验证模型
SSO 最明显的好处是简化了身份验证模型。想象一下,你从一个在线商店开始,初始的身份验证模型是简单明了的:
随着你的业务增长,你决定添加一个商店管理应用程序,以允许店主管理他们的商店。现在你有两个需要对用户进行身份验证的应用程序。
下面是你的一些选择:
1. 你可以为商店管理应用创建一个单独的用户数据库。
这是最简单的解决方案,但这意味着你需要为商店管理应用程序实现身份验证过程,并且用户需要创建一个新账户才能使用该应用。
2. 你可以为两个应用程序使用相同的用户数据库。
这是一个更好的解决方案,因为用户不需要创建新账户。然而,你仍然需要为商店管理应用程序实现身份验证过程。
3. 你可以使用 SSO。
这是迄今为止最好的解决方案。你不需要实现另一个身份验证过程,用户也不需要为商店管理应用程序创建新账户。此外,你可以添加更多的应用程序和登录方法,而无需更改身份验证模型或用户体验。
改善用户体验
SSO 在以下两方面改善了用户体验:
- 用户可以在多个应用程序中共享相同的账户。
- 一旦用户在一个应用程序中登录,他们在同一设备上的其他应用程序中无需再次登录。
这里可能会出现一些顾虑,但这些都是可以解决的。
1. 如何区分应用程序?
单点登录并不意味着我们将所有应用程序都视为相同。在著名的开放标准 OpenID Connect 中,每个应用程序称为一个客户端,身份验证流程根据客户端类型的不同而不同。虽然最终用户无需知道区别,但客户端类型对身份验证服务器来说很重要,以确定身份验证流。
2. 如果用户不想共享相同的账户怎么办?
这是一个合理的担忧,但这不是 SSO 的问题。如果用户不想共享相同的账户,他们可以为新应用程序创建一个新账户。关键是给用户选择的权利。
3. 如果我需要限制对某些应用程序的访问怎么办?
事实上,SSO 是一种身份验证技术,而访问控制是为了授权。SSO 可以与访问控制解耦。例如,你可以使用 SSO 验证用户身份,然后使用 基于角色的访问控制 (RBAC) 来限制对某些应用程序或资源的访问。
要了解更多关于身份验证和授权的信息,请参阅 CIAM 101: 身份验证、身份、SSO。
4. SSO 需要将用户重定向到身份验证服务器。
重定向是身份验证的标准实践。考虑到用户体验,我们可以利用多种技术来减少摩擦:
- 使用刷新令牌减少身份验证频率。
- 使用特定的登录方法(如 Google 或 Facebook)初始化身份验证过程,以减少点击次数。
- 利用静默身份验证加快身份验证过程。
增强安全性
1. 所有与安全相关操作的中心位置
SSO 允许你在中心位置管理所有的安全相关操作。例如,正如我们在上节所提到的,SSO 仍然可以区分应用程序,并针对每个应用应用平台特定的身份验证流程。没有 SSO,你需要根据应用程序类型实现各种身份验证流程。
此外,像 多因素身份验证 (MFA) 这样的高级安全功能,通过 SSO 实现起来更容易,而不会搞乱身份验证模型。
2. 减少攻击面
理论上,SSO 减少了攻击面,因为你只需要保护一个身份验证服务器,而不是多个应用程序。集中化的方法也更容易监控和检测可疑活动。
3. 经过考验的标准和协议
像 OpenID Connect 和 OAuth 2.0 这样的开放标准和协议在行业中被广泛使用,经过多年的测试。它们都符合 SSO 的概念,并受到大多数身份提供者 (IdPs) 的支持。通过将这些标准与 SSO 结合使用,你可以拥有一个安全可靠的身份验证系统。
好的,开始实施 SSO
实现 SSO 可能会很大且复杂,有很多事项需要考虑,例如:
- 遵循标准和协议
- 不同客户端类型的身份验证流程
- 多种登录方法
- 像 MFA 这样的安全功能
- 用户体验
- 访问控制
每个主题都可以单独成文且不胜其烦。为了简单起见,最好从现成提供 SSO 的管理服务开始。我们的产品 Logto 就是这样一种服务,并且将其集成到你的应用程序中只需几分钟。
使用管理服务最常见的顾虑之一是供应商锁定。幸运的是,Logto 并不存在这个问题。Logto 构建在 OpenID Connect 和 OAuth 2.0 之上,并且源于开源。我们优先考虑为客户提供保障,并致力于让你有选择的自由。