单点登录(Single Sign-On,SSO)是一种身份验证过程,其中用户仅使用一组登录凭据即可访问多个应用程序或网站。这避免了用户需要单独登录到不同的应用程序。
用户凭证和其他识别信息由称为身份提供者( Identity Provider,IdP)的集中式系统存储和管理。身份提供者是提供对其他网站和应用程序的访问的可信系统。
基于单点登录(SSO)的身份验证系统通常用于员工需要访问其组织的多个应用程序的企业环境中。
组件
让我们讨论单点登录(SSO)的一些关键组件。
身份提供者(IdP)
用户身份信息由称为身份提供者(IdP)的集中式系统存储和管理。身份提供者认证用户并提供对服务提供者的访问。
身份提供者可以通过验证用户名和密码或者通过验证由单独的身份提供者呈现的关于用户身份的声明来直接验证用户。身份提供者处理用户身份的管理,以便将服务提供者从该责任中解放出来。
服务提供者
服务提供商向终端用户提供服务。它们依赖身份提供者来确认用户的身份,并且通常关于用户的某些属性由身份提供者管理。服务提供者还可以维护用户的本地帐户以及对其服务唯一的属性。
身份经纪人
身份经纪人(Identity Broker)充当中介,将多个服务提供商与各种不同的身份提供商连接起来。使用身份经纪人,我们可以在任何应用程序上执行单点登录,而免去了使用其中协议的麻烦。
SAML
安全断言标记语言(Security Assertion Markup Language )是一种开放标准,它允许客户端在不同系统之间共享有关身份、身份验证和权限的安全信息。SAML是使用可扩展标记语言( Extensible Markup Language,XML)标准实现的,用于共享数据。
SAML明确支持身份联合,使身份提供者(IdP)能够无缝、安全地将经过身份验证的身份及其属性传递给服务提供者。
SSO是如何工作的?
现在,让我们看一下单点登录的工作原理:
- 用户从他们期望的应用程序请求资源。
- 应用程序将用户重定向到身份提供者(IdP)进行身份验证。
- 用户使用其凭据(通常是用户名和密码)登录。
- 身份提供者(IdP)向客户端应用程序发送单点登录响应。
- 应用程序授予用户访问权限。
SAML vs OAuth 2.0 vs OpenID Connect(OIDC)
SAML、OAuth 和 OIDC Connect 有很多区别。SAML 使用 XML传递消息,而 OAuth 和 OIDC 使用JSON。OAuth 提供了更简单的体验,而 SAML 面向企业安全。
OAuth 和 OIDC 广泛使用 RESTful 通信,这就是为什么移动和现代Web应用程序发现 OAuth 与 OIDC 对用户来说体验更好。另一方面,SAML 在浏览器中放置一个会话 cookie,允许用户访问某些网页。这对于短期工作负载非常有用。
OIDC 对开发人员友好且易于实现,这拓宽了它可能实现的使用场景。它可以通过所有通用编程语言中的免费库从零开始快速实现。SAML 的安装和维护可能很复杂,只有企业规模的公司才能很好地处理。
OpenID Connect 本质上是 OAuth 框架之上的一层。因此,它可以提供一个内置的权限层,要求用户同意服务提供者可能访问的内容。尽管 SAML 也能够允许同意流程,但它通过开发人员执行的硬编码实现,而不是作为其协议的一部分。
这两种身份验证协议都有擅长的部分。一如既往,这在很大程度上取决于我们的特定使用场景和目标受众。
优点
以下是使用单点登录的好处:
- 易于使用,因为用户只需要记住一组凭据。
- 无需经过漫长的授权过程即可轻松访问。
- 强制执行安全性和遵从性以保护敏感数据。
- 简化管理,减少IT支持成本和管理时间。
缺点
以下是单点登录的一些缺点:
- 单一密码漏洞,如果主 SSO 密码被泄露,则相当于所有受支持的应用程序都被泄露。
- 使用单点登录的身份验证过程比传统身份验证慢,因为每个应用程序都必须请求 SSO 提供者进行验证。
例子
以下是一些常用的身份提供者(IdP):