SSO 让用户一次认证后在多个关联系统间自由切换,无需重复登录。OAuth 2.0、SAML 2.0 和 OpenID Connect 是三种主流协议,各有适用场景和安全考量。

| 主流协议 | SAML 2.0、OAuth 2.0、OpenID Connect |
| 典型安全风险 | Signature Wrapping、redirect_uri 劫持、IdP 单点沦陷 |
| 主流 IdP 平台 | Okta、Azure AD、Keycloak(开源) |
SAML 2.0(2005 年发布)是企业级 SSO 的老牌标准,基于 XML,通过 Identity Provider(IdP)签发 XML 断言给 Service Provider(SP)。广泛用于企业内网和 SaaS(如 Salesforce、Okta),配置复杂,但与 Active Directory 集成成熟。
OAuth 2.0(RFC 6749,2012 年)本质上是一个授权框架,不是认证协议——它解决的是「第三方应用能否代表用户访问资源」,而非「用户是谁」。开发者把它用作 SSO 是一种误用,因此才催生了 OpenID Connect。
OpenID Connect(OIDC)(2014 年)在 OAuth 2.0 之上添加了 ID Token(JWT 格式),明确定义了「用户身份」的传递方式。Google、GitHub、微信等主流平台的「第三方登录」几乎全部基于 OIDC。[1]
SSO 的安全隐患可概括为「单点登录,单点沦陷」:IdP 若被攻破,攻击者获得的是所有接入系统的访问权限。
协议实现层面的漏洞屡见不鲜:SAML 的 XML 签名绕过(Signature Wrapping Attack)曾影响多个知名服务,攻击者通过操纵 XML 结构使签名验证通过但断言内容被替换。OAuth 的 redirect_uri 验证不严是历年漏洞赏金报告中的常客——若 SP 接受任意子路径或使用正则不精确匹配,授权码就可被重定向到攻击者控制的 URI。
2014 年,「Covert Redirect」漏洞被披露,影响当时大量实现了 OAuth 2.0 的平台。2022 年,微软 Azure AD OIDC 实现的一个 Token 验证缺陷(「nOAuth」)允许攻击者在某些条件下劫持账号,再次提醒开发者不应假设 IdP 返回的 Token 无需额外校验。

| 主流协议 | SAML 2.0、OAuth 2.0、OpenID Connect |
| 典型安全风险 | Signature Wrapping、redirect_uri 劫持、IdP 单点沦陷 |
| 主流 IdP 平台 | Okta、Azure AD、Keycloak(开源) |
登录 后参与讨论
暂无讨论,来发表第一条评论吧