什么是安全断言标记语言 (SAML)?
- IAM 词汇表
- 什么是安全断言标记语言 (SAML)?
安全断言标记语言 (SAML) 是一种开放的、基于 XML 的标准,允许身份提供商 (IdP) 将用户的身份验证和授权数据安全地传递给服务提供商 (SP)。简单来说,SAML 是一种主要技术,让用户只需登录一次即可访问多个应用程序,而无需重新输入凭据。
SAML 有什么用途?
SAML 通常用于用户需要安全、便捷地访问多个应用程序的场景。最常见的使用场景包括:
- 单点登录 (SSO):登录一次即可访问多个应用程序,无需为每项服务重新输入凭据。
- 联合身份:SAML 允许组织信任由合作伙伴或母公司签发的身份,使来自受信任域的用户无需单独创建账户即可获得访问权限。
- 企业访问管理:IT 团队通过单一 IdP 路由登录,集中控制哪些用户可以访问哪些应用程序,并有助于在所有应用程序中统一实施多因素身份验证 (MFA) 等策略。
在每种使用场景中,IdP 都会签发一份已签名的 XML 断言,并通过用户的浏览器将其传递给 SP,从而安全传输身份验证数据,而无需用户再次登录。
SAML 的关键组成部分
SAML 交换通常涉及多个组成部分的协同工作。以下是一些核心术语,有助于理解身份验证过程:
- 主体 (subject):正在接受身份验证的用户,通常是尝试访问特定应用程序的人员。
- 身份提供商 (IdP):验证用户身份并签发断言的系统,例如 Microsoft Entra ID 或 Okta,从而完成实际登录。
- 服务提供商 (SP):用户想要访问的应用程序或网站,依赖 IdP 确认用户身份,而不是自行管理登录凭据。
- SAML 断言:IdP 发送给 SP 的已签名 XML 声明,其中包含用户的身份和授权数据(详见下文)。
- 元数据:双方提前交换的配置信息,包括端点、证书等,用于建立 IdP 和 SP 之间的信任关系并确保双方能够通信。
- 签名证书:包含公钥的数字证书,SP 使用其中的公钥验证断言签名,在 SP 和 IdP 之间建立信任,并确认断言在传输过程中未被篡改。
SAML 身份验证是如何工作的?
SAML 身份验证通过将已签名的断言从 IdP 传递至 SP,确认用户的身份。SP 发起的流程是最常见的 SAML 身份验证方式,始于用户访问想要使用的网站或应用程序。如果应用程序依赖外部 IdP 进行登录,它会携带 SAML 身份验证请求,将用户的浏览器重定向到 IdP。随后,IdP 会检查用户的凭据以验证其身份;如果用户已有活动会话,则跳过此步骤。IdP 验证通过后,会生成已签名的断言,并通过浏览器将其发送回 SP。最后,SP 验证断言签名并信任该断言,让用户直接访问应用程序,无需再次单独登录。虽然 SP 发起的身份验证是 SAML 中最常见的方式,但也存在 IdP 发起的流程,即用户从 IdP 端开始操作,例如点击公司仪表板上的应用程序磁贴。
什么是 SAML 断言?
SAML 断言是 IdP 发送给 SP、用于证明用户身份的已签名 XML 文档。每个断言可包含一条或多条声明,这些声明是 SP 用于决定是否向用户授予访问权限的具体信息。声明有三种类型:
- 身份验证声明用于确认用户身份、登录时间和登录方式(即是否使用了 MFA)。
- 属性声明包含用户的其他信息,例如其角色或部门。SP 可使用这些属性来决定用户可以查看哪些内容或执行哪些操作。
- 授权决策声明用于指明是否授予用户访问特定资源的权限。此类声明很少使用,因为更复杂的授权通常由可扩展访问控制标记语言 (XACML) 处理。
SAML 与其他身份验证标准的比较
SAML 通常与其他身份和访问协议一起使用,这些协议的功能相互关联,但各不相同。SAML 的主要用途是处理身份验证,确认用户身份以及其是否有权访问网站或应用程序。正是这种身份验证功能使 SAML 区别于 OAuth。OAuth 是一种授权协议,用于授予应用程序访问特定资源的权限。SAML 和 OAuth 是互补而非竞争关系:SAML 用于确认身份,OAuth 用于授予访问权限。
OpenID Connect (OIDC) 与 SAML 更为相似,因为两者都用于用户身份验证并支持 SSO。但是,OIDC 是构建在 OAuth 之上的身份验证层,使用适用于现代 Web 和移动应用程序的 JSON Web 令牌 (JWT);相比之下,SAML 基于 XML 的方式仍广泛用于企业 Web SSO,不过 OIDC 正日益成为新应用程序的默认选择。相比之下,轻量级目录访问协议 (LDAP) 是一种较早的目录协议,早于云计算出现,专为本地部署环境设计。LDAP 并不与 SAML 竞争,而通常位于 SAML IdP 的后端,作为用户凭据的来源。
| SAML | OAuth | OIDC | LDAP | |
|---|---|---|---|---|
| 作用 | 身份验证和单点登录 (SSO) | 授权 | 身份验证(基于 OAuth) | 目录访问 |
| 格式 | 已签名的 XML 断言 | 访问令牌 | JWT | 目录查询 |
| 最适合的场景 | 企业 Web 应用程序 SSO | 委派 API 访问 | 移动和云原生应用程序 | 本地部署目录 |
SAML
OAuth
OIDC
LDAP
SAML 的优缺点
SAML 既有诸多优势,也存在需要权衡的因素,采用前值得深入了解。
SAML 的优势
SAML 的最大优势在于减少用户需要管理的密码数量。通过一次登录即可访问多个应用程序,用户需要记住的凭据更少,从而缩小攻击面并降低凭据被盗的风险。由于身份验证通过单一 IdP 进行,组织还能实现集中式策略控制;安全团队可在一个位置对所有已连接的应用程序统一实施 MFA。这种集中化能够降低服务台成本,因为密码重置请求减少了,从而减轻 IT 支持通常面临的压力。
SAML 的局限性
只有正确配置标记语言,SAML 的优势才能充分发挥。它依赖 XML 签名和 XML 加密来保障消息完整性和隐私性,并结合 TLS 确保传输安全。最常见的 SAML 漏洞之一与配置错误有关,例如未能正确验证签名。其基于 XML 的模型不如现代令牌格式灵活,因此 SAML 在移动应用程序和单页应用程序中的实施更具挑战性。