SAML
什么是 SAML
SAML(Security Assertion Markup Language,安全断言标记语言)是一种基于 XML 的标准协议,用于在身份提供商(IdP)和服务提供商(SP)之间安全地交换身份认证和授权信息。
核心术语
| 术语 | 英文 | 说明 |
|---|---|---|
| IdP | Identity Provider | 身份提供商,提供身份认证服务,如竹云 IDaaS |
| SP | Service Provider | 服务提供商,利用 IdP 的身份管理功能提供具体服务 |
| SP 发起 SSO | SP-initiated SSO | 由服务提供商发起的单点登录 |
| IdP 发起 SSO | IdP-initiated SSO | 由身份提供商发起的单点登录 |
SAML 的核心能力
SAML 提供了一套安全断言机制:
断言(Assertion):由 IdP 签发的、关于用户身份的声明。它使用 XML 格式安全地表达"某个用户已经通过了身份认证"。
使用 SAML 后,SP 可以直接联系 IdP,对尝试访问安全内容的用户进行身份验证,无需维护独立的用户体系。
SAML 的特点
专为 Web 浏览器单点登录设计
SAML 诞生的初衷就是解决 Web 浏览器环境下的单点登录问题。它不仅简化了登录步骤,还针对不同的安全系统提供了一个共有的框架。
企业级安全标准
SAML 支持以下安全特性:
- 数字签名:断言信息经过数字签名,防止篡改
- 加密传输:敏感信息可加密传输
- 时间窗口:断言具有有效期,过期自动失效
- 受众限制:断言可指定仅对特定 SP 有效
广泛的企业应用
SAML 是企业级应用单点登录的事实标准,被众多商业应用原生支持:
Salesforce、Office 365、Google Workspace、AWS、Workday 等均支持 SAML 协议接入。
SAML 与 OIDC 的选择
| 对比项 | SAML | OIDC |
|---|---|---|
| 数据格式 | XML | JSON |
| 传输方式 | 浏览器表单提交 | HTTP 请求 |
| 最佳场景 | 传统企业应用 | 现代 Web/移动应用 |
| 令牌大小 | 较大(XML) | 紧凑(JWT) |
对于现代应用,推荐优先使用 OIDC;对于传统的企业级 Web 应用,SAML 仍是可靠的选择。
图解 SAML
