3. 企业SSO典型架构剖析
企业单点登录(SSO)并不是“一个登录页 + 一个跳转”这么简单。真正决定安全边界与运维复杂度的,是身份提供方(IdP)、服务提供方(SP)、访问网关(Gateway)与反向代理(Proxy)四类角色如何部署、如何建立信任链,以及信任关系在何处终止。理解这四种角色的位置与信任传递方式,才能判断一次 SSO 登录中“谁在断言身份、谁在验证断言、谁在放行流量”。
四类角色的职责边界
IdP(Identity Provider)是身份权威源,负责认证用户、签发断言(Assertion)或令牌(Token),并维护会话。典型产品包括 ADFS、Azure AD/Entra ID、Keycloak、Okta 等。它掌握用户凭据、MFA 策略与签名私钥,是整个信任链的根。
SP(Service Provider)是依赖 IdP 断言来建立本地会话的应用系统,如 OA、Jira、GitLab。SP 不直接校验用户密码,而是校验 IdP 签名后的 SAML 断言或 OIDC 令牌,再签发自己的会话 Cookie。
网关(Gateway)位于用户与后端应用之间,承担统一认证入口、协议转换、会话管理与策略执行。它可以是身份感知代理(Identity-Aware Proxy),也可以是 API 网关。网关的价值在于把认证从每个应用“外移”,让老旧应用无需改造即可接入 SSO。
代理(Proxy)通常指反向代理层(Nginx、Envoy、Traefik),负责 TLS 终止、请求转发、Header 注入。它本身不一定理解 SAML/OIDC,但常与网关配合,把认证后的身份信息以 Header 形式传给后端。
三种典型部署模式
模式一:直连式(IdP ↔ SP)。应用直接与 IdP 对接,SP 自行处理断言校验与会话。优点是链路短、无中间组件;缺点是每个应用都要实现协议逻辑,证书与元数据分散管理,老旧系统改造成本高。
模式二:网关集中式(IdP ↔ Gateway ↔ SP)。所有应用流量先经过网关,网关完成 OIDC/SAML 认证后,将身份以 Header(如 X-User、X-Roles)注入请求,再转发给后端。后端应用信任来自网关的 Header。此模式适合大量无法改造的遗留系统,但必须严格限制后端只能被网关访问,否则 Header 可被伪造。
模式三:代理 + 网关分层式(IdP ↔ Proxy ↔ Gateway ↔ SP)。反向代理负责 TLS 终止与路由,网关负责认证与策略。分层后职责清晰,但信任链更长,需要明确“哪一层终止 TLS、哪一层校验令牌、哪一层注入身份”。
信任链设计的关键控制点
信任链的本质是“谁有权代表 IdP 说话”。在直连模式中,SP 直接持有 IdP 的公钥或证书指纹,验签即可;在网关模式中,信任关系变成两段:第一段是网关信任 IdP,第二段是后端信任网关。第二段最容易被忽视,也最容易出问题。
如果后端应用同时暴露在网关之外,攻击者可以绕过网关直接访问后端,并伪造 X-User: admin 这类 Header。因此必须做到:后端只监听内网地址、只接受来自网关源 IP 的连接、在网关侧剥离客户端传入的同名 Header。例如在 Nginx 中可配置:
# 网关侧:剥离客户端伪造的身份Header
proxy_set_header X-User "";
proxy_set_header X-Roles "";
# 认证通过后由网关重新注入
proxy_set_header X-User $auth_user;
proxy_set_header X-Roles $auth_roles;
另一个控制点是断言校验的严格性。SAML 断言必须校验签名、Audience、NotBefore/NotOnOrAfter、InResponseTo,防止断言重放或跨 SP 使用。OIDC 则需校验 iss、aud、exp、nonce 与签名算法,拒绝 alg=none。
部署模式选择建议
应用数量少、可改造、安全团队希望链路最短时,优先直连式;遗留系统多、希望统一认证入口时,选择网关集中式;已有成熟反向代理体系、需要精细流量治理时,采用代理 + 网关分层式。无论哪种模式,都应遵循“信任根唯一、信任边界清晰、身份注入点唯一”三条原则。信任链一旦出现多个可签发身份的节点,SSO 的安全假设就不再成立。