简体中文
  • OIDC
  • SAML
  • SSO
  • 身份验证
  • 授权

SAML 与 OIDC

SAML 和 OIDC 是 SSO 行业中使用最广泛的两种身份验证协议。本文将从架构和使用案例方面比较 SAML 和 OIDC。

Simeng
Simeng
Developer

什么是 SAML?

SAML(安全断言标记语言)是一种基于 XML 的开放标准,用于在不同方之间交换身份验证和授权数据,尤其是在身份提供商(IdP)和服务提供商(SP)之间。它实现了基于 Web 的 SSO(单点登录),允许用户在多个应用之间进行一次性身份验证。SAML 是一个成熟的协议,已经存在很长时间,并被企业广泛采用。一些最流行的 SaaS 平台,如 Salesforce、Workday 和 Microsoft Azure AD 都支持 SAML SSO。

SAML 组件

  1. 身份提供商 (IdP):验证用户并向服务提供商提供身份信息的实体。
  2. 服务提供商 (SP):为用户提供服务并依赖身份提供商进行用户验证的实体。
  3. SAML 断言:承载用户身份验证和授权详细信息的基于 XML 的文档。包括身份验证声明、属性声明和授权决策声明。
  4. SAML 协议:定义 IdP 和 SP 之间交换 SAML 断言的消息格式和规则。
  5. SAML 绑定:定义 SAML 消息如何通过不同的通信协议(如 HTTP POST、HTTP Redirect 等)传输。
  6. SAML 元数据:包含 IdP 和 SP 配置信息的基于 XML 的文档。它包括公钥、终端和受支持的绑定,用于在 IdP 和 SP 之间建立信任。
  7. 单点登录端点:SP 将用户重定向到 IdP 进行身份验证的端点。
  8. 断言消费者服务 (ACS) URL:IdP 在成功认证后发送 SAML 断言的端点。

SAML 如何工作?

  1. SP 启动的 SSO 流程:
  1. IdP 启动的 SSO 流程:

SAML 的优点

  • 成熟且广泛采用:SAML 是一个成熟的协议,已经存在很长时间,并被企业广泛采用。
  • 标准化:SAML 是由 OASIS 维护的开放标准,确保不同供应商之间的互操作性。
  • SSO:SAML 实现了基于 Web 的 SSO,允许用户进行一次性身份验证即可访问多个应用。
  • 集中式用户管理:SAML 允许组织集中管理用户身份,并一致地执行安全策略。

SAML 的挑战

  • 复杂性:SAML 是一个需要深入理解 XML 和安全概念的复杂协议。
  • 性能:SAML 消息是基于 XML 的,可能比较大。与 JSON Web 令牌 (JWT) 等令牌格式相比,XML 的传输和解析可能更慢。
  • 过时标准:SAML 是一个较旧的标准,与 OIDC 相比被认为不太安全。
  • 供应商锁定:SAML 是一个特定于供应商的协议,切换供应商可能具有挑战性。

什么是 OIDC?

OIDC(OpenID Connect)是构建在 OAuth 2.0 协议之上的身份层。与 SAML 类似,OIDC 也用于在 IdP 和 SP 之间交换身份验证和授权数据。

与 SAML 相比,OIDC 是一个更现代、更轻量级的协议,在现代 Web 和移动应用中日益受到欢迎。OIDC 使用 JWT 传输身份信息,与基于 XML 的 SAML 断言相比,更紧凑且更易于处理。它在面向消费者的应用和 API 安全中特别受欢迎。

OIDC 组件

  1. 身份提供商 (IdP):验证用户并向服务提供商提供身份信息的实体。
  2. 依赖方 (RP):为用户提供服务并依赖身份提供商进行用户验证的实体。例如,Web 应用、移动应用或 API。
  3. OIDC 令牌:承载用户身份信息的令牌。
  • ID 令牌:包含用户身份信息的 JWT 格式令牌。
  • 访问令牌:JWT 或不透明格式的令牌,授权访问受保护资源。
  • 刷新令牌:用于在不需要用户重新认证的情况下获取新访问令牌的令牌。它为 RP 提供离线的长期授权。
  1. OIDC 端点:用于身份验证和令牌交换的端点。其中一些最重要的端点有:
  • 发现端点:RP 可以从 IdP 检索公开的 OIDC 配置信息的地方。
  • 授权端点:RP 发送身份验证请求的地方。
  • 令牌端点:RP 向授权服务器请求令牌的地方。
  • 用户信息端点:RP 可以检索用户的个人信息的地方。
  1. 作用域:OIDC 定义了一组标准的作用域,定义授予 RP 的访问权限。如 openidprofileemailaddress 等。

OIDC 如何工作?

OIDC 提供多个流程,专门为不同的使用场景设计。以下是两个最常见的 OIDC 流程:

  1. 授权代码流程:

授权代码流程是 OIDC 中最常见的流程,适用于面向消费者的应用。

  1. 客户端凭证流程:

客户端凭证流程可用于非用户基础(机器对机器)的身份验证。

OIDC 的优点

  • 现代且轻量级:OIDC 是一个现代协议,使用基于 JSON 的 JWT 令牌,与基于 XML 的 SAML 断言相比,更紧凑且更易于处理。
  • 面向消费者的应用:OIDC 在面向消费者的应用和 API 安全中特别受欢迎。
  • 互操作性:基于 OAuth 2.0 构建,OIDC 与不同平台、设备和平台兼容。
  • 安全性:OIDC 提供了一种更安全的用户身份验证和 API 保护方法。它结合了各种现代安全功能,如令牌内省、令牌撤销、授权码验证扩展(PKCE),并支持适应不同安全需求的不同身份验证流程。
  • 易用性:与 SAML 相比,OIDC 更容易实现和使用。它对开发者更友好,并为多种编程语言和平台提供了全面的库和 SDK。

OIDC 的挑战

  • 令牌管理:OIDC 依赖于令牌进行身份验证和授权。它需要适当的令牌管理实践来确保安全性。
  • 复杂性:虽然 OIDC 对于基本设置很简单,但由于其灵活性,在实现高级定制时可能会增加复杂性。例如,自定义声明和基于角色的访问控制(RBAC)等。
  • 采纳:与 SAML 相比,尤其是在企业领域,OIDC 仍然相对较新。一些旧系统可能仍依赖 SAML 进行 SSO。

SAML 与 OIDC 比较

方面SAMLOIDC
令牌格式基于 XML 的 SAML 断言基于 JSON 的 JWT 令牌
主要用例企业 SSO、B2B 集成面向消费者的应用,API 安全
易用性复杂,需要对 XML 有深入理解简单,基于 JSON,易于实现
采纳被企业广泛采纳在现代应用中越来越受欢迎
安全性成熟但被认为不太安全现代且更安全
灵活性有限,专为 SSO 用例设计灵活,支持多种用例

SAML 和 OIDC 的未来

SAML 和 OIDC 都广泛用于身份验证和授权目的。

SAML 依然是企业 SSO 和 B2B 集成的基石。其对联合身份管理的强大支持和经过验证的记录确保了其持续的相关性,特别是对于遗留系统和大型组织。

而 OIDC 随着现代应用中对安全和可扩展身份验证的需求而不断发展。其轻量级特性以及与 API 和微服务的对齐,使其成为云原生和分布式架构的基石。随着无密码身份验证、生物识别和多因素身份验证(MFA)的崛起,OIDC 预计将与新兴技术无缝集成,从而确保其在未来几年仍然具有相关性。