《SAML系列一》SAML概念
字数 1549 2025-08-15 21:33:14
SAML 安全断言标记语言详解
1. SAML 概述
SAML (Security Assertion Markup Language) 是一种基于 XML 的安全信息交换框架,定义了安全通信所需的协议和格式规范。
核心特点
- 中心化认证机制
- 基于 XML 标准
- 支持跨域身份验证
- 主要用于单点登录(SSO)和联合身份认证
2. SAML 核心组件
2.1 主要实体
-
Service Provider (SP) - 服务提供者
- 向用户提供正式商业服务的实体
- 需要验证用户身份(如员工管理系统、财务系统等)
-
Identity Provider (IdP) - 身份提供者
- 负责用户身份鉴别
- 确保用户是其声明的身份(如公司统一登录的SSO系统)
2.2 主要用途
- 单点登录(SSO)
- 联合认证(Federated Identity)
- 与其他安全架构集成(如WS-Security)
3. SAML 协议流程(Web浏览器)
-
用户尝试访问受保护资源
- 非认证用户尝试访问SP受保护资源
- SP上的过滤器检测用户授权状态
-
重定向到IdP
- 未认证用户被重定向到IdP进行身份验证
-
用户认证
- IdP独立完成用户认证(不涉及SP)
-
重定向回SP
- 认证成功后,用户携带SAML产物(artifact)返回SP
- SAML产物是认证信息的标识(不直接传输敏感信息)
-
请求认证信息
- SP将SAML产物发送回IdP
- IdP返回对应的认证信息(SAML Artifact Response)
4. SAML 核心概念
4.1 断言(Assertions)
断言是SAML中描述认证信息的对象,包含:
- 用户认证时间、方式
- 可选的扩展信息(如Email、电话等)
断言示例:
<saml2:Assertion>
<saml2:Issuer>IDP</saml2:Issuer>
<ds:Signatur>...</ds:Signatur>
<saml2:Subject>
<saml2:NameID>zhang.san@abc.com</saml2:NameID>
<saml2:SubjectConfirmation>...</saml2:SubjectConfirmation>
</saml2:Subject>
<saml2:Conditions>...</saml2:Conditions>
<saml2:AuthnStatement>...</saml2:AuthnStatement>
<saml2:AttributeStatement>...</saml2:AttributeStatement>
</saml2:Assertion>
4.2 协议(Protocol)
定义如何执行不同行为,细化为Request和Response对象。
认证请求协议示例:
<saml2p:AuthnRequest
AssertionConsumerServiceURL="http://xxxx"
Destination="http://xxx"
ID="_52c9839568ff2e5a10456dfefaad0555"
IssueInstant="2020-05-11T02:37:05.469Z"
ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTPArtifact"
Version="2.0">
<saml2:Issuer>xxx</saml2:Issuer>
<saml2p:NameIDPolicy AllowCreate="true"
Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/>
<saml2p:RequestedAuthnContext Comparison="minimum">
<saml2:AuthnContextClassRef>
urn:oasis:names:tc:SAML:2.0:ac:classes:Password
</saml2:AuthnContextClassRef>
</saml2p:RequestedAuthnContext>
</saml2p:AuthnRequest>
4.3 绑定(Binding)
定义SAML信息如何通过通信协议传输,OpenSAML支持:
- SAML SOAP Binding (基于SOAP 1.1)
- Reverse SOAP (PAOS) Binding
- HTTP Redirect (GET) Binding
- HTTP POST Binding
- HTTP Artifact Binding
- SAML URI Binding
4.4 配置(Profiles)
定义如何组织断言、协议和绑定来解决特定场景问题,如Web浏览器SSO配置。
4.5 元数据(MetaData)
包含SAML通信各方的配置信息:
- 通信方ID
- Web Service地址
- 支持的绑定类型
- 通信密钥等
5. OpenSAML 库
OpenSAML是便于使用SAML消息的依赖库,提供:
- 创建SAML消息
- 解析SAML对象并导出为XML
- 签名和加密功能
- SAML消息编码和传输
注意:
- 提供Java和C++实现
- 不提供身份识别和授权功能
- 仅实现SAML消息相关操作
6. 开发工具
- SAML Tracer: Google和火狐插件,可显示SAML消息
- OpenSAML提供的metadata provider工具
7. 实际应用
在单点登录中,一旦用户在主站(IdP)认证后,访问其他已注册应用(SP)时可直接登录,无需重复输入凭证。
8. 安全考虑
- 使用SAML产物而非直接传输敏感信息
- 支持消息签名和加密
- 通过元数据确保通信双方可信
9. 总结
SAML作为企业级身份认证解决方案,通过标准化的XML框架实现了:
- 安全的跨域身份验证
- 简化的用户登录体验
- 灵活的可扩展性
- 与现有安全架构的兼容性
OpenSAML为开发者提供了实现SAML协议的强大工具集,使SSO等安全功能的开发更加高效可靠。