简体中文
  • SSO SAML

IdP 发起的 SSO 与 SP 发起的 SSO

了解 IdP 发起的 SSO 和 SP 发起的 SSO 之间的区别,以及为什么 SP 发起的 SSO 更加安全。

Simeng
Simeng
Developer

IdP 发起的 SSO 与 SP 发起的 SSO

术语

  • 身份提供商(IdP):存储和验证用户身份的服务。
  • 服务提供商(SP):为用户提供服务的网页或服务。
  • 单点登录(SSO):一个会话和用户认证服务,允许用户使用一组登录凭据(例如,用户名和密码)访问多个应用程序。
  • SAML:安全断言标记语言是一种在参与方之间交换认证和授权数据的开放标准,特别是在身份提供商和服务提供商之间。它是一个常用的 SSO 协议。一旦用户被 IdP 成功认证,IdP 向 SP 发送 SAML 断言,SP 验证后授予用户访问权限。
  • OIDC:OpenID Connect 是一种更现代和安全的 SSO 协议。它建立在 OAuth 2.0 之上,提供了一种方法来基于 IdP 的认证验证用户身份。一旦用户被 IdP 成功认证,IdP 向 SP 发送一个 JWT 格式的令牌,SP 验证后授予用户访问权限。

SP 发起的 SSO

顾名思义,SP 发起的 SSO 由服务提供商启动。用户通过访问 SP 网站上的某个资源开始认证过程。然后 SP 将用户重定向到 IdP 进行认证。一旦用户认证成功,IdP 生成一个令牌(OIDC)或一个 SAML 断言(SAML)并发送回 SP。SP 验证令牌或断言并授予用户访问权限。

  1. 用户访问 SP 的网站并尝试访问一个资源。
  2. 用户点击 SSO 提供商的登录按钮(例如 Google、Azure AD、Okta 等)。
  3. SP 将用户重定向到 IdP 进行认证。
  4. 用户登录到 IdP。
  5. IdP 发送一个令牌或断言回到 SP。
  6. SP 验证令牌或断言并授予用户访问权限。

IdP 发起的 SSO

与 SP 发起的 SSO 不同,IdP 发起的 SSO 由身份提供商启动。用户从 IdP 的网站开始认证过程。通常,用户会在 IdP 的门户上找到支持的 SP 应用程序列表。用户点击 SP 应用程序并重定向到 SP 的网站,带有预先认证的身份。

IdP 发起的 SSO

  1. 用户登录到 IdP。
  2. 用户访问 IdP 的门户并选择一个 SP 应用程序。
  3. IdP 验证用户的当前会话并将用户重定向到 SP,带有预先认证的 SSO 身份。
  4. SP 验证 SSO 身份并授予用户访问权限。

IdP 发起的 SSO 与 SP 发起的 SSO

IdP 发起的 SSO 相对于 SP 发起的 SSO 的优势

大型企业和依赖于多种第三方应用或服务的组织更常采用 IdP 发起的 SSO。例如 Workday、Salesforce 等。它提供了一种集中化的方式来管理用户对多个应用程序的访问并强制实行 SSO 认证。通过启用 IdP 发起的 SSO,员工可以直接从 IdP 的门户访问连接的应用程序,而不需要访问每个应用程序的网站。这样可以减少入职时间并改善用户体验。

IdP 发起的 SSO 相对于 SP 发起的 SSO 的风险

IdP 发起的 SSO 比 SP 发起的 SSO 承担更多风险。

  1. 缺乏认证上下文:所有从 IdP 发起的认证请求都是未请求的。因此,SP 发起认证过程,可能导致未授权访问的发生。用户会话可能被劫持的风险存在。恶意行为者可能会在用户不知情或未经同意的情况下为其发起登录过程。

  2. 会话固定:由于 SP 未发起认证过程,用户的会话可能会固定在 IdP 的会话上。这可能导致会话固定攻击,攻击者可以将用户的会话固定到 IdP 的会话上,从而获得对用户帐户的未授权访问。

  3. 网络钓鱼攻击:IdP 发起的 SSO 可能容易受到网络钓鱼攻击。恶意行为者可以诱骗用户访问假 IdP 的门户并窃取用户凭据。一旦用户登录,攻击者就可以将用户重定向到携带预认证身份的 SP。

  4. 无请求验证保证:在 SP 发起的 SSO 中,通常 SP 会在向 IdP 的请求中包括必要的安全信息,以保持请求的完整性。一旦 SP 收到认证响应,将验证这些信息以防止任何 CSRF 攻击。例如 OIDC 中的 state 参数和 SAML 中的 RelayState。然而,在 IdP 发起的 SSO 中,SP 没有发起认证过程,因此 SP 对请求验证没有保证。

IdP 发起的 SSO 相对于 SP 发起的 SSO 的限制

由于上述漏洞,OIDC 不支持 IdP 发起的 SSO。OIDC 要求 SP 发起认证过程以确保请求的完整性。即使在用户从不是 SP 的第三方开始认证过程的情况下,用户也应首先被引导到 SP 以发起认证过程。

但在 SAML 中,IdP 发起的 SSO 是可能的。IdP 可以在未由 SP 发起认证过程的情况下生成 SAML 断言。在 SAML IdP 发起的 SSO 中,可能会将没有适当 RequestIDRelayState 的 SAML 断言直接发送到 SP 的 ACS URL。SP 应能够处理这种断言并授予用户访问权。(注意:没有 RequestIDRelayState,SP 无法保证请求的完整性)。

结论

虽然 IdP 发起的 SSO 提供了一种集中化的方式来管理用户对多个应用程序的访问,但与 SP 发起的 SSO 相比,它承载更多风险。SP 发起的 SSO 更加安全,并提供了更多关于认证请求完整性的保证。建议对于基于 OIDC 和 SAML 的 SSO 使用 SP 发起的 SSO。