《身份认证漏洞排查实战指南》
第2章 认证架构分析

2、认证架构分析:单点登录(SSO)架构、多因素认证(MFA)架构、联邦身份认证架构、无密码认证架构

在现代企业级身份认证体系中,架构设计直接决定了系统的安全性、用户体验与运维成本。本节将深入剖析四种主流认证架构的核心原理、组件交互与安全风险排查要点。

2.1 单点登录(SSO)架构

SSO允许用户使用一组凭据登录多个应用系统,核心在于集中式认证服务与令牌(Token)的传递。常见实现包括基于Cookie的SSO、基于SAML的SSO以及基于OAuth2/OpenID Connect的SSO。

架构组件

组件职责常见产品/协议
身份提供者 (IdP)验证用户身份,颁发令牌Keycloak, Okta, ADFS
服务提供者 (SP)受保护的应用,信任IdP颁发的令牌Web应用, API网关
令牌 (Token)携带用户身份与属性信息SAML Assertion, JWT
会话存储维护用户登录状态Redis, 分布式缓存

SSO认证流程(SAML 2.0)

  1. 用户访问SP受保护资源,未携带有效会话。
  2. SP生成SAML认证请求,重定向用户至IdP。
  3. IdP验证用户凭据(如密码+MFA),生成SAML断言。
  4. IdP通过HTTP POST将断言发送回SP的Assertion Consumer Service (ACS)。
  5. SP验证断言签名与时效,建立本地会话,返回资源。

SSO架构内联SVG图

用户 SP (应用) IdP 1. 访问资源 2. 重定向至IdP 3. 用户认证 (输入凭据) 4. 提交凭据 5. 颁发SAML断言 6. 返回资源

安全排查要点

  • 令牌劫持:检查Token是否在URL中传递(应使用POST绑定),是否启用HTTPS与HttpOnly Cookie。
  • 会话固定:验证IdP在认证成功后是否重新生成会话ID。
  • 签名验证:确保SP严格验证SAML断言或JWT的签名,防止伪造令牌。

2.2 多因素认证(MFA)架构

MFA通过组合两种或以上不同类型的认证因素(知识、持有、固有)来增强安全性。常见架构包括基于TOTP的软令牌、基于短信/邮件的OTP、以及基于FIDO2的硬件密钥。

MFA认证流程(TOTP模式)

  1. 用户输入用户名/密码完成第一因素认证。
  2. 服务器检测到需要第二因素,要求用户提供TOTP码。
  3. 用户打开Authenticator App(如Google Authenticator),获取基于时间的一次性密码。
  4. 用户输入TOTP码,服务器使用共享密钥与当前时间窗口验证。
  5. 验证通过,颁发会话令牌。

MFA架构内联SVG图

用户 应用服务器 MFA验证服务 1. 密码认证 2. 请求MFA挑战 3. 返回TOTP挑战 4. 要求输入TOTP 5. 提交TOTP码 6. 验证TOTP

安全排查要点

  • 旁路攻击:检查是否允许跳过MFA(如特定IP、内部网络),应强制所有敏感操作启用MFA。
  • OTP重放:验证TOTP窗口大小(通常为±1个时间步),防止重放攻击。
  • 恢复码管理:恢复码应安全存储(如哈希),且仅一次性使用。

2.3 联邦身份认证架构

联邦身份认证允许跨安全域的身份共享,用户在一个身份提供者(IdP)处认证后,可访问多个联盟内的服务提供者(SP)。核心协议包括SAML 2.0、WS-Federation和OpenID Connect。

联邦认证流程(跨域SAML)

  1. 用户访问SP1(域A),SP1检测到用户未认证,生成SAML AuthnRequest。
  2. SP1将用户重定向至域A的IdP(IdP-A)。
  3. IdP-A验证用户身份,生成包含用户属性的SAML断言。
  4. IdP-A将断言通过用户浏览器POST回SP1的ACS URL。
  5. SP1验证断言,建立本地会话。
  6. 当用户访问SP2(域B)时,SP2将用户重定向至IdP-B,IdP-B与IdP-A建立信任关系(通过元数据交换),完成跨域认证。

联邦身份认证架构内联SVG图

用户 SP1 (域A) SP2 (域B) IdP-A IdP-B 1. 访问SP1 2. 重定向至IdP-A 3. 用户认证 4. 提交凭据 5. 颁发SAML断言 6. 访问SP2 7. 重定向至IdP-B 信任联盟

安全排查要点

  • 元数据篡改:检查IdP与SP之间的元数据交换是否使用签名,防止中间人注入恶意端点。
  • 断言劫持:确保SAML断言包含 Audience 与 Recipient 限制,防止跨服务重放。
  • 会话超时:联邦会话应设置合理的超时时间,避免长期有效导致泄露风险。

2.4 无密码认证架构

无密码认证旨在消除静态密码带来的泄露、弱口令与钓鱼风险。主流方案包括基于公钥密码学的FIDO2/WebAuthn、基于魔法链接(Magic Link)的邮箱认证、以及基于生物识别的设备内认证。

无密码认证流程(WebAuthn)

  1. 用户注册时,服务器生成一个随机挑战(Challenge),发送给客户端。
  2. 客户端调用WebAuthn API,用户通过生物识别或PIN确认身份,生成新的公私钥对。
  3. 客户端将公钥与签名后的挑战返回服务器,服务器存储公钥。
  4. 用户登录时,服务器发送新挑战,客户端使用私钥签名挑战。
  5. 服务器使用存储的公钥验证签名,认证通过。

无密码认证架构内联SVG图

用户 浏览器 (WebAuthn) 认证服务器 1. 点击登录 2. 请求挑战 3. 返回挑战 (Challenge) 4. 请求生物识别/PIN 5. 确认身份 6. 返回签名后的挑战

安全排查要点

  • 私钥存储:检查私钥是否安全存储在设备安全区域(如TPM、Secure Enclave),防止导出。
  • 挑战随机性:服务器生成的挑战必须具有足够熵值且一次性使用,防止重放攻击。
  • 注册绑定:验证公钥是否与用户账户强绑定,防止注册阶段替换公钥。

四种架构对比总结

架构核心优势主要风险适用场景
SSO提升用户体验,减少密码疲劳单点失效,令牌劫持企业内部多应用集成
MFA显著提高账户安全性用户摩擦,OTP钓鱼高安全敏感系统
联邦身份跨域身份共享,降低管理成本信任链复杂,元数据安全合作伙伴、多云环境
无密码消除密码泄露风险,抗钓鱼设备丢失,兼容性要求高现代浏览器、移动端应用

在实际渗透测试中,应针对不同架构的薄弱环节设计测试用例,例如SSO的令牌伪造、MFA的旁路绕过、联邦身份的断言篡改、无密码的注册劫持等。下一节将深入实战漏洞挖掘技术。