chat

一、概念

SAML 2.0 是一种 基于 XML 的开放标准协议,用于 在身份提供者(IdP)和服务提供者(SP)之间传递身份验证和授权信息

  • 核心目标:实现 单点登录(SSO),让用户在多个服务间无需重复登录。
  • 数据传输格式:XML 文档,通过浏览器或后端通信传递。
  • 协议类型:基于声明(Assertion-based) 的身份验证协议。

核心区别于 OAuth/OIDC:

  • OAuth/OIDC 更关注 授权或认证,用于 API 和 Web 应用。
  • SAML 主要用于 企业级 SSO,尤其是 Web 单点登录

二、SAML 2.0 的核心角色

SAML 2.0 定义了三个主要角色:

  1. 身份提供者(Identity Provider, IdP)

    • 负责验证用户身份(登录认证)。
    • 颁发 SAML 断言(Assertion),证明用户身份。
    • 典型例子:Okta、ADFS、Shibboleth。
  2. 服务提供者(Service Provider, SP)

    • 提供用户访问的应用或服务。
    • 信任 IdP 的身份断言来授予用户访问权限。
    • 典型例子:企业内部门户、Salesforce、Confluence。
  3. 用户/浏览器(Principal)

    • 用户通过浏览器访问 SP。
    • 浏览器作为中介传递 SAML 消息。

三、SAML 2.0 的核心概念

  1. SAML 断言(Assertion)

    • 由 IdP 生成,包含用户身份信息和权限信息。
    • 常见类型:

      • Authentication Assertion:用户已被认证。
      • Attribute Assertion:用户属性信息(邮箱、角色等)。
      • Authorization Decision Assertion:用户是否有权限访问资源。
  2. 协议(Protocol)

    • 定义断言的请求和响应方式,如:

      • AuthnRequest:SP 请求用户认证。
      • Response:IdP 返回认证结果(SAML Assertion)。
  3. 绑定(Binding)

    • 定义 SAML 消息在传输时的封装方式:

      • HTTP Redirect
      • HTTP POST
      • SOAP
  4. 元数据(Metadata)

    • 描述 IdP 或 SP 的信息(证书、端点、绑定方式),用于信任建立。

四、SAML 2.0 的典型 SSO 流程

最常见的 Web 浏览器 SSO(Web Browser SSO) 流程如下:

  1. 用户访问服务提供者(SP)

    • 用户请求访问 SP 的受保护资源。
    • SP 检测用户未登录,生成 AuthnRequest 并重定向到 IdP。
  2. 身份提供者(IdP)认证用户

    • 用户登录 IdP(如果未登录)。
    • IdP 生成 SAML Assertion,包含用户身份信息和认证信息。
  3. 用户携带 SAML 断言返回 SP

    • 通过浏览器 POST 或 Redirect,将断言发送给 SP 的 SSO 端点。
  4. SP 验证 SAML Assertion

    • 检查断言签名、有效期、接收者等。
    • 验证通过后,授予用户访问权限。
  5. 用户访问资源

    • 用户获得 SP 会话,可以访问受保护资源。

流程图示意

User           SP               IdP
 |             |                 |
 |---访问资源-->|                 |
 |<--重定向----|                 |
 |             |---AuthnRequest->|
 |             |<--登录页面------|
 |---登录------>|                 |
 |             |<--SAML Assertion-|
 |<--POST断言--|                 |
 |             |--验证断言--------|
 |<--访问资源-->|                 |

五、典型应用场景

  1. 企业单点登录(SSO)

    • 员工通过一个入口登录即可访问多个内部系统。
  2. 跨组织身份认证

    • 例如合作公司之间的联合身份认证(Federated Identity)。
  3. 云服务登录

    • 企业内部用户通过 IdP 登录 SaaS 服务(如 Salesforce、Office 365、Slack)。

六、SAML 与 OAuth 2.0 / OIDC 对比

特性 SAML 2.0 OAuth 2.0 OpenID Connect
目标 单点登录 / 企业 SSO 授权访问资源 身份认证 + 授权
令牌类型 SAML Assertion(XML) Access Token(JWT或其他) ID Token(JWT)+ Access Token
适用场景 Web SSO、企业级应用 API 授权、移动/前端应用 Web/Mobile 登录、SSO
数据格式 XML JSON JSON (JWT)
传输方式 浏览器重定向、POST、SOAP HTTP 请求 HTTP 请求

七、安全特性

  1. 签名与加密

    • SAML Assertion 可以被签名和加密,确保完整性和机密性。
  2. 时间限制

    • Assertion 包含有效期(NotBefore / NotOnOrAfter),防止重放攻击。
  3. 单点登出(Single Logout, SLO)

    • 用户在 IdP 登出,可同时注销多个 SP 会话。
  4. 元数据验证

    • SP 和 IdP 通过元数据建立信任,验证证书。

八、总结