概述
单点登录(SSO: Single Sign-On)是对多个相关但独立的软件系统进行身份验证的属性。使用此属性一次登录(log in)用户,并获得对所有系统的访问权,而无需提示再次登录每个系统。相反(Conversely),单点退出系统(logout)是一种属性,其中一个单点退出操作终止对多个软件系统的访问。
单点登录(SSO: Single sign-on)是一种机制,它使用单一的身份验证操作,允许授权用户访问所有相关但独立的软件系统或应用程序,而无需在特定会话期间再次登录(log in)每个软件系统或应用程序。它降低了管理员集中管理用户的风险,通过允许移动性提高了用户的生产力,并允许用户在经过一次身份验证后访问多个服务或应用程序。这并不意味着SSO系统统一了所有服务、应用程序和系统的帐户信息,而是将用户需要登录的多种帐户信息隐藏在一个单一的帐户中。一旦用户登录,SSO系统就会生成各种应用程序和系统接受的身份验证信息。
SSO的历史
SSO技术始于20世纪90年代中末(in the mid-to-late 1990s)的现场(on-premises)身份工具,该工具帮助组织安全地连接他们的计算机、网络和服务器。在过去,组织开始通过专用系统(如微软的Active Directory (AD)和轻量级目录访问协议(LDAP: Lightweight Directory Access Protocol)管理他们的用户身份,然后通过内部(on-premises)SSO或Web访问管理(WAM: Web Access Management)工具进行安全访问。
随着IT继续向云移动,分散在多个设备上,并面临更复杂的网络威胁,传统的身份管理工具一直在努力保持同步。IT团队需要一个解决方案,为用户提供对任何应用程序或服务的快速、安全的SSO访问。
SSO是如何工作的?
SSO基于联邦身份(federated Identity)的概念,即在可信(trusted)但自治的(autonomous)系统之间共享身份属性(Identity attributes)。当一个用户被一个系统信任时,他们自动被授权访问与该系统建立信任关系的所有其他人。这为现代SSO解决方案提供了基础,这些解决方案通过OpenID Connect和SAML 2.0等协议实现。
SSO令牌(tokens)如何工作?
SSO工作像数字密钥证明用户的身份。当用户使用其SSO登录登录到服务时,身份验证令牌(authentication token)将被创建并存储在其浏览器或SSO解决方案的中央身份验证服务(CAS: central authentication service)服务器中。用户随后访问的任何应用程序或网站都将与SSO服务进行检查,然后SSO服务发送用户令牌以确认其身份,并为他们提供访问,而无需再次登录(log in)。这个过程确保了跨不同平台的无缝和安全体验。
SSO的实现方法
SSO的实现方法多种多样,主要可以分为以下几类:
基于SAML的SSO
SAML(Security Assertion Markup Language)是一种基于XML的标准化身份验证协议。SAML SSO的工作原理是,用户首先在SAML身份验证服务提供商(SAML IdP)上进行身份验证,获得一个SAML断言。之后,用户可以使用该断言访问任何支持SAML的应用程序或系统。
特点:
- 开放标准,易于部署和实施。
- 可扩展性好,支持多种身份验证方式。
- 灵活度高,可以根据需要进行定制。
基于OAuth的SSO
OAuth是一种授权协议,常用于社交网络登录。OAuth SSO的工作原理是,用户首先在OAuth授权服务器上进行身份验证,并授予应用程序访问其个人信息的权限。之后,应用程序可以使用授权令牌访问用户的个人信息。
特点:
- 简单易用,易于部署和实施。
- 可扩展性好,支持多种平台和设备。
- 安全性高,因为使用了授权令牌机制。
在基于社交登录的SSO场景中,OAuth授权服务器通常是社交网络平台,例如Facebook、Twitter、Google等。用户可以使用他们的社交网络账户登录应用程序,而无需创建新的账户和密码。
基于OpenID Connect (OIDC)的SSO
OpenID Connect (OIDC) 是一种建立在 OAuth 2.0 之上的身份认证协议,它允许客户端应用程序验证用户身份并获取用户个人信息。OIDC 通常用于实现单点登录 (SSO),因为它可以使用户使用一套登录凭据访问多个应用程序或系统。
特点:
- 简单易用: 用户可以使用现有的 IdP 账户登录应用程序或系统,无需创建新的账户和密码。
- 安全性高: OIDC 使用 OAuth 2.0 的授权机制,可以有效防止用户信息泄露。
- 可扩展性好: OIDC 支持多种身份验证方式,可以满足不同用户的需求。
- 灵活性高: OIDC 可以根据需要进行定制,以满足特定的业务需求。
基于 OIDC 的 SSO 也有以下缺点:
- 需要额外的 IdP: 应用程序或系统需要部署或使用第三方 IdP。
- 增加了复杂性: OIDC 的实现比传统的用户名/密码认证更复杂。
基于Kerberos的SSO
Kerberos是一种基于对称密钥加密的认证协议,常用于企业环境中。Kerberos SSO的工作原理是,用户首先在Kerberos认证服务器上进行身份验证,获得一个Kerberos票证。之后,用户可以使用该票证访问任何支持Kerberos的应用程序或系统。
特点:
- 安全性高,因为Kerberos使用了对称密钥加密技术。
- 可扩展性好,适合大型企业环境。
- 复杂性高,需要部署和维护Kerberos认证服务器。
基于Cookie的SSO
基于Cookie的SSO是一种简单的SSO实现方式。其工作原理是,用户在登录应用程序时,应用程序会在用户浏览器中存储一个Cookie。之后,用户访问其他应用程序时,应用程序会检查浏览器中的Cookie,如果发现有效的Cookie,则无需再次登录。
特点:
- 实现简单,易于部署。
- 不需要额外的服务器或协议。
- 安全性较低,因为Cookie容易被窃取或伪造。
基于硬件令牌的SSO
基于硬件令牌的SSO是一种安全性的SSO实现方式。其工作原理是,用户使用硬件令牌生成一次性密码,然后使用该密码登录应用程序。
特点:
- 安全性高,因为一次性密码很难被窃取或伪造。
- 易于使用,无需安装额外的软件。
- 成本较高,需要为每个用户购买硬件令牌。
总结
SSO的各种方法各有优缺点,应根据实际需求选择合适的SSO方案。
在选择SSO方案时,应考虑以下因素:
- 安全性:SSO方案应能提供足够的安全性,以保护用户身份信息。
- 可扩展性:SSO方案应能支持未来的扩展,以满足不断增长的需求。
- 易用性:SSO方案应易于使用,方便用户登录和访问应用程序。
- 成本:SSO方案的成本应在可承受的范围内。
SSO使用的认证方式来分类
根据SSO使用的认证方式,可以将其分为两大类:
- 基于凭证的SSO(Credential-based SSO):用户使用用户名和密码等凭证进行身份验证,然后获得用于访问应用程序或系统的Cookie或令牌。
- 基于令牌的SSO(Token-based SSO):用户使用预先生成的令牌进行身份验证,无需提供凭证。
以下表格总结了基于凭证的SSO和基于令牌的SSO的特点和实现方式:
| 认证方式 | 特点 | 实现方式 |
|---|---|---|
| 基于凭证的SSO(Credential-based SSO) | * 简单易用,易于部署 * 不需要额外的服务器或协议 * 安全性较低,因为Cookie或令牌容易被窃取或伪造``` |
* 基于Cookie的SSO:用户登录应用程序时,应用程序会在用户浏览器中存储一个Cookie。之后,用户访问其他应用程序时,应用程序会检查浏览器中的Cookie,如果发现有效的Cookie,则无需再次登录。 * 基于硬件令牌的SSO:用户使用硬件令牌生成一次性密码,然后使用该密码登录应用程序。 |
| 基于令牌的SSO(Token-based SSO) | * 安全性高,因为令牌不易被窃取或伪造 * 可扩展性好,支持多种身份验证方式 * 复杂性较高,需要部署和维护令牌服务器 |
* 基于Kerberos的SSO:用户首先在Kerberos认证服务器上进行身份验证,获得一个Kerberos票证。之后,用户可以使用该票证访问任何支持Kerberos的应用程序或系统。 * 基于SAML的SSO:用户首先在SAML身份验证服务提供商(SAML IdP)上进行身份验证,获得一个SAML断言。之后,用户可以使用该断言访问任何支持SAML的应用程序或系统。 * 基于OAuth的SSO:用户首先在OAuth授权服务器上进行身份验证,并授予应用程序访问其个人信息的权限。之后,应用程序可以使用授权令牌访问用户的个人信息。 |
参考
- okta.com/blog/2021/02/single-sign-on-sso