chat
一、概念
SAML 2.0 是一种 基于 XML 的开放标准协议,用于 在身份提供者(IdP)和服务提供者(SP)之间传递身份验证和授权信息。
- 核心目标:实现 单点登录(SSO),让用户在多个服务间无需重复登录。
- 数据传输格式:XML 文档,通过浏览器或后端通信传递。
- 协议类型:基于声明(Assertion-based) 的身份验证协议。
核心区别于 OAuth/OIDC:
- OAuth/OIDC 更关注 授权或认证,用于 API 和 Web 应用。
- SAML 主要用于 企业级 SSO,尤其是 Web 单点登录。
二、SAML 2.0 的核心角色
SAML 2.0 定义了三个主要角色:
-
身份提供者(Identity Provider, IdP)
- 负责验证用户身份(登录认证)。
- 颁发 SAML 断言(Assertion),证明用户身份。
- 典型例子:Okta、ADFS、Shibboleth。
-
服务提供者(Service Provider, SP)
- 提供用户访问的应用或服务。
- 信任 IdP 的身份断言来授予用户访问权限。
- 典型例子:企业内部门户、Salesforce、Confluence。
-
用户/浏览器(Principal)
- 用户通过浏览器访问 SP。
- 浏览器作为中介传递 SAML 消息。
三、SAML 2.0 的核心概念
-
SAML 断言(Assertion)
- 由 IdP 生成,包含用户身份信息和权限信息。
-
常见类型:
- Authentication Assertion:用户已被认证。
- Attribute Assertion:用户属性信息(邮箱、角色等)。
- Authorization Decision Assertion:用户是否有权限访问资源。
-
协议(Protocol)
-
定义断言的请求和响应方式,如:
- AuthnRequest:SP 请求用户认证。
- Response:IdP 返回认证结果(SAML Assertion)。
-
-
绑定(Binding)
-
定义 SAML 消息在传输时的封装方式:
- HTTP Redirect
- HTTP POST
- SOAP
-
-
元数据(Metadata)
- 描述 IdP 或 SP 的信息(证书、端点、绑定方式),用于信任建立。
四、SAML 2.0 的典型 SSO 流程
最常见的 Web 浏览器 SSO(Web Browser SSO) 流程如下:
-
用户访问服务提供者(SP)
- 用户请求访问 SP 的受保护资源。
- SP 检测用户未登录,生成 AuthnRequest 并重定向到 IdP。
-
身份提供者(IdP)认证用户
- 用户登录 IdP(如果未登录)。
- IdP 生成 SAML Assertion,包含用户身份信息和认证信息。
-
用户携带 SAML 断言返回 SP
- 通过浏览器 POST 或 Redirect,将断言发送给 SP 的 SSO 端点。
-
SP 验证 SAML Assertion
- 检查断言签名、有效期、接收者等。
- 验证通过后,授予用户访问权限。
-
用户访问资源
- 用户获得 SP 会话,可以访问受保护资源。
流程图示意
User SP IdP
| | |
|---访问资源-->| |
|<--重定向----| |
| |---AuthnRequest->|
| |<--登录页面------|
|---登录------>| |
| |<--SAML Assertion-|
|<--POST断言--| |
| |--验证断言--------|
|<--访问资源-->| |
五、典型应用场景
-
企业单点登录(SSO)
- 员工通过一个入口登录即可访问多个内部系统。
-
跨组织身份认证
- 例如合作公司之间的联合身份认证(Federated Identity)。
-
云服务登录
- 企业内部用户通过 IdP 登录 SaaS 服务(如 Salesforce、Office 365、Slack)。
六、SAML 与 OAuth 2.0 / OIDC 对比
| 特性 | SAML 2.0 | OAuth 2.0 | OpenID Connect |
|---|---|---|---|
| 目标 | 单点登录 / 企业 SSO | 授权访问资源 | 身份认证 + 授权 |
| 令牌类型 | SAML Assertion(XML) | Access Token(JWT或其他) | ID Token(JWT)+ Access Token |
| 适用场景 | Web SSO、企业级应用 | API 授权、移动/前端应用 | Web/Mobile 登录、SSO |
| 数据格式 | XML | JSON | JSON (JWT) |
| 传输方式 | 浏览器重定向、POST、SOAP | HTTP 请求 | HTTP 请求 |
七、安全特性
-
签名与加密
- SAML Assertion 可以被签名和加密,确保完整性和机密性。
-
时间限制
- Assertion 包含有效期(NotBefore / NotOnOrAfter),防止重放攻击。
-
单点登出(Single Logout, SLO)
- 用户在 IdP 登出,可同时注销多个 SP 会话。
-
元数据验证
- SP 和 IdP 通过元数据建立信任,验证证书。
