IdP 發起的 SSO vs SP 發起的 SSO
了解 IdP 發起的 SSO 和 SP 發起的 SSO 之間的差異,以及為什麼 SP 發起的 SSO 更加安全。
了解 IdP 發起的 SSO 和 SP 發起的 SSO 之間的差異,以及為什麼 SP 發起的 SSO 更加安全。
正如其名称所示,SP 发起的 SSO 是由服务提供者启动的。用户通过访问 SP 网站上的资源开始身份验证过程。然后,SP 将用户重定向到 IdP 进行身份验证。一旦用户通过验证,IdP 生成一个令牌 (OIDC) 或 SAML 断言 (SAML),并将其发送回 SP。SP 验证令牌或断言并授予用户访问权限。
与 SP 发起的 SSO 不同,IdP 发起的 SSO 是由身份提供者启动的。用户从 IdP 的网站开始身份验证过程。通常,用户会在 IdP 的门户上找到支持的 SP 应用程序列表。用户点击 SP 应用程序后,会被重定向到 SP 的网站,并带有预验证的身份。

IdP 发起的 SSO 更常被大型企业和依赖于各种第三方应用程序或服务的组织采用。例如 Workday、Salesforce 等。它提供了一种集中管理用户访问多个应用程序并强制执行 SSO 身份验证的方法。通过启用 IdP 发起的 SSO,员工可以直接从 IdP 的门户访问连接的应用程序,无需访问每个应用程序的网站,从而减少入职时间并改善用户体验。
与 SP 发起的 SSO 相比,IdP 发起的 SSO 存在更多风险。
缺乏身份验证上下文: 从 IdP 发起的所有身份验证请求都是未经请求的。因此,SP 发起身份验证过程,可能打开未经授权访问的大门。存在用户会话可能被劫持的风险。恶意行为者可能在用户不知情或未经用户同意的情况下为其发起登录过程。
会话固定: 由于 SP 没有发起身份验证过程,用户的会话可能固定到 IdP 的会话。这可能导致会话固定攻击,攻击者可以将用户的会话固定到 IdP 的会话,并获得未经授权的访问用户帐户的权限。
钓鱼攻击: IdP 发起的 SSO 可能容易受到钓鱼攻击。恶意行为者可以欺骗用户访问虚假的 IdP 门户并窃取用户的凭据。一旦用户登录,攻击者可以将用户重定向到具有预验证身份的 SP。
没有请求验证的保证: 在 SP 发起的 SSO 中,通常 SP 会在请求中包含必要的安全信息,以保持请求的完整性。SP 收到身份验证响应后,将验证这些信息以防止任何 CSRF 攻击。例如:OIDC 中的 state 参数和 SAML 中的 RelayState。然而,在 IdP 发起的 SSO 中,SP 未发起身份验证过程,因此 SP 无法对请求验证提供保证。
由于上述漏洞,OIDC 不支持 IdP 发起的 SSO。OIDC 要求 SP 发起身份验证过程,以确保请求的完整性。即使在用户从非 SP 的第三方启动身份验证过程的情况下,用户也应首先被引导至 SP 以启动身份验证过程。
但在 SAML 中,IdP 发起的 SSO 是可行的。IdP 可以在不通过 SP 发起身份验证过程的情况下生成 SAML 断言。在 SAML IdP 发起的 SSO 中,可以直接向 SP 的 ACS URL 发送没有合适 RequestID 和 RelayState 的 SAML 断言。SP 应能够处理这种断言并授予用户访问权限。(注意:没有 RequestID 和 RelayState,SP 无法保证请求的完整性)。
尽管 IdP 发起的 SSO 提供了一种集中管理用户访问多个应用程序的方式,但与 SP 发起的 SSO 相比,它存在更多风险。SP 发起的 SSO 更加安全,并提供了对身份验证请求完整性的更多保证。建议对基于 OIDC 和 SAML 的 SSO 使用 SP 发起的 SSO。