《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 主要用途

  1. 单点登录(SSO)
  2. 联合认证(Federated Identity)
  3. 与其他安全架构集成(如WS-Security)

3. SAML 协议流程(Web浏览器)

  1. 用户尝试访问受保护资源

    • 非认证用户尝试访问SP受保护资源
    • SP上的过滤器检测用户授权状态
  2. 重定向到IdP

    • 未认证用户被重定向到IdP进行身份验证
  3. 用户认证

    • IdP独立完成用户认证(不涉及SP)
  4. 重定向回SP

    • 认证成功后,用户携带SAML产物(artifact)返回SP
    • SAML产物是认证信息的标识(不直接传输敏感信息)
  5. 请求认证信息

    • 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支持:

  1. SAML SOAP Binding (基于SOAP 1.1)
  2. Reverse SOAP (PAOS) Binding
  3. HTTP Redirect (GET) Binding
  4. HTTP POST Binding
  5. HTTP Artifact Binding
  6. SAML URI Binding

4.4 配置(Profiles)

定义如何组织断言、协议和绑定来解决特定场景问题,如Web浏览器SSO配置。

4.5 元数据(MetaData)

包含SAML通信各方的配置信息:

  • 通信方ID
  • Web Service地址
  • 支持的绑定类型
  • 通信密钥等

5. OpenSAML 库

OpenSAML是便于使用SAML消息的依赖库,提供:

  1. 创建SAML消息
  2. 解析SAML对象并导出为XML
  3. 签名和加密功能
  4. SAML消息编码和传输

注意:

  • 提供Java和C++实现
  • 不提供身份识别和授权功能
  • 仅实现SAML消息相关操作

6. 开发工具

  • SAML Tracer: Google和火狐插件,可显示SAML消息
  • OpenSAML提供的metadata provider工具

7. 实际应用

在单点登录中,一旦用户在主站(IdP)认证后,访问其他已注册应用(SP)时可直接登录,无需重复输入凭证。

8. 安全考虑

  • 使用SAML产物而非直接传输敏感信息
  • 支持消息签名和加密
  • 通过元数据确保通信双方可信

9. 总结

SAML作为企业级身份认证解决方案,通过标准化的XML框架实现了:

  • 安全的跨域身份验证
  • 简化的用户登录体验
  • 灵活的可扩展性
  • 与现有安全架构的兼容性

OpenSAML为开发者提供了实现SAML协议的强大工具集,使SSO等安全功能的开发更加高效可靠。

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、电话等) 断言示例 : 4.2 协议(Protocol) 定义如何执行不同行为,细化为Request和Response对象。 认证请求协议示例 : 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等安全功能的开发更加高效可靠。