Cyber Security Academy · 课时

SAML 与联合身份

企业单点登录。

第 3 / 4 课13 个步骤

SAML 与联合身份 是 CoddyKit 上的免费 Cyber Security Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cyber Security Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cyber Security Academy 课程共包含 4 节课。

SAML 是什么

SAML(安全断言标记语言)是一种基于 XML、用于交换身份验证和授权数据的标准,在企业 SSO中占主导地位。

  • 它允许企业身份提供方为用户向许多应用提供可信证明。
  • SAML 2.0 早于 OIDC 出现,但在 B2B 和员工身份管理领域仍然根深蒂固。

理解 SAML 对防御企业联合身份体系至关重要,因为单一的信任漏洞就可能暴露所有已连接的应用。

IdP 与 SP 角色

SAML 联合身份体系包含两个主要参与方。

  • 身份提供方(IdP)负责对用户进行身份验证并签发断言(Okta、Entra ID、Ping)。
  • 服务提供方(SP)是信任 IdP 并授予访问权限的应用。

双方通过带外交换元数据来建立信任,其中包括签名证书和端点 URL。

IdP  -> authenticates user, signs assertion
SP   -> consumes assertion, grants access
Metadata exchange establishes trust (certs, ACS URLs)

SAML 断言

核心产物是断言,它是一份声明 IdP 已对某个主体进行身份验证的 XML 文档。

  • 主体用于标识用户(NameID)。
  • 条件定义有效时间窗口和预期受众。
  • AuthnStatement记录身份验证的方式和时间。
  • AttributeStatement携带角色、电子邮件和群组声明。
<saml:Assertion>
  <saml:Subject><saml:NameID>user@corp</saml:NameID></saml:Subject>
  <saml:Conditions NotOnOrAfter="2026-06-04T10:05:00Z"
     AudienceRestriction="https://sp.example"/>
  <saml:AuthnStatement .../>
</saml:Assertion>

SP 发起的 SSO 流程

最常见的模式是SP 发起的 SSO。

  • 用户访问 SP,SP 生成 AuthnRequest 并重定向到 IdP。
  • IdP 对用户进行身份验证,并将签名的 Response 通过 POST 返回给 SP 的断言使用者服务(ACS)。
  • SP 验证断言并创建本地会话。
1. SP -> AuthnRequest -> IdP (redirect)
2. user authenticates at IdP
3. IdP -> signed SAMLResponse -> SP ACS (HTTP POST)
4. SP validates -> session

XML 签名锚定信任

SAML 的安全性建立在XML 数字签名之上。IdP 使用其私钥对断言和/或响应进行签名;SP 使用受信任的证书进行验证。

  • 请直接对断言进行签名,而不只是对外层响应签名。
  • 请使用元数据中的固定 IdP 证书验证签名,不要使用消息中嵌入的证书。

大多数 SAML 攻击都针对签名验证逻辑。

XML 签名包装(XSW)

XML 签名包装是 SAML 中的一类签名攻击。攻击者保留一个有效签名的元素,同时添加第二个伪造的断言,而应用逻辑实际读取的是这个伪造断言。

  • 签名仍然可以通过对原始片段的验证。
  • 但是,业务逻辑处理的是注入的、未签名的断言。

缓解措施:使用经过加固的 SAML 库,验证已签名的元素就是实际使用的元素,并拒绝包含多个或含义不明确断言的文档。

Document after XSW:
  <Response>
    <Assertion id="evil">attacker claims</Assertion>  // read by app
    <Assertion id="orig" SIGNED>real user</Assertion>  // sig valid here
  </Response>

受众与接收方限制

断言必须绑定到预期的 SP。SAML 提供了明确的限制。

  • AudienceRestriction 指定断言对哪个 SP 实体 ID 有效。
  • SubjectConfirmation 中的 Recipient 必须与 ACS URL 匹配。

SP 必须执行这些检查。跳过受众检查会使为一个应用签发的断言能够被重放到另一个应用。

重放与时间防护

断言是短期有效且只能使用一次的凭据。SP 必须强制执行这一点。

  • 遵守 NotBefore 和 NotOnOrAfter,并将时钟偏差控制在很小范围内。
  • 跟踪断言的 ID,并在有效时间窗口内拒绝任何重复使用。
  • 要求 ACS 端点使用 TLS。

如果不跟踪重放,被捕获的断言就可能在过期前再次提交。

SP checks:
  now in [NotBefore, NotOnOrAfter]  (+- small skew)
  assertion.ID not seen before -> store + reject reuse

身份联合与信任链

身份联合可跨越组织边界扩展 SSO,有时借助在协议之间进行转换的中枢或代理。

  • 每条信任链路都可能成为薄弱点;IdP 一旦遭到入侵,攻击者就能冒充所有用户。
  • 身份代理可能在 SAML 和 OIDC 之间搭桥,因此需要谨慎映射声明。

对属性映射实施最小权限,并监控是否意外注册了新的 SP。

常见的 SAML 弱点

值得审计的常见 SAML 失效模式:

  • 未验证签名,或者仅对响应签名而未对断言签名。
  • 易受 XML 签名包装攻击影响。
  • 缺少受众/接收方检查。
  • 没有重放保护,或有效期窗口过长。
  • SP 上存在 XML 外部实体(XXE)解析。
  • 信任消息中嵌入的证书,而不是已固定元数据中的证书。
Disable external entities in the XML parser:
  parser.setFeature(
    "http://apache.org/xml/features/disallow-doctype-decl", true)

SAML 与 OIDC

二者都提供 SSO,但设计不同。

  • SAML 基于 XML,使用浏览器 POST/重定向绑定,在企业/员工场景中广泛使用,工具链成熟。
  • OIDC 基于 JSON/JWT,适合 REST,移动端和单页应用支持更好。

许多组织同时运行二者。无论给定应用使用哪种协议,防御人员都应了解其断言验证规则,因为攻击面不同。

快速检查:击败 XSW

请选择针对所述攻击的最佳防御措施。

回顾:SAML 与身份联合

核心要点:

  • SAML 是基于 XML 的企业级 SSO,身份提供方和服务提供方之间通过已签名的断言进行通信。
  • 安全性取决于是否使用已固定的证书正确执行 XML 签名验证。
  • 防范 XML 签名包装、重放和 XXE。
  • 始终强制执行 受众/接收方限制和有效期窗口。
  • 身份联合扩大了信任范围,但 IdP 遭到入侵时,影响范围也会成倍扩大。
免费开始

用 AI 导师学习 Cyber Security Academy — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
76
课程
303

常见问题解答

「SAML 与联合身份」课时是免费的吗?

是的 — 「SAML 与联合身份」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cyber Security Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cyber Security Academy 课程共包含 4 节课。

「SAML 与联合身份」这节课中我会学到什么?

企业单点登录。 你通过在浏览器中直接运行的动手代码来练习 Cyber Security Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cyber Security Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cyber Security Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「SAML 与联合身份」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cyber Security Academy 课中编写并运行代码吗?

能。每节 Cyber Security Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. OAuth 2.0 流程
  2. OpenID Connect(OIDC)
  3. SAML 与联合身份
  4. 令牌攻击与强化
← 返回 Cyber Security Academy