SP 与 IdP 启动的 SSO

本文讨论了两个联盟部署之间的 SP 和 IdP 启动的 SSO 的概念以及这两个流之间的区别。

本文还介绍了在联盟 SSO 期间 IdP 与 SP 共享的用户状态或返回 URL 的概念,该概念称为:

本文展示了使用 SAML 2.0 协议的示例,但其他协议也是如此。

联盟 SSO 流

拓扑

典型的联盟部署由以下实体组成:

SP 启动的 SSO

SP 启动的 SSO 流是从 SP 安全域启动的联盟 SSO 操作,由 SP 联盟服务器创建联盟验证请求并将用户重定向到 IdP,其中包含消息和一些表示操作状态的短字符串:

请注意操作状态:通常,消息中共享的状态不应太长,因为它可能会中断重定向流,重定向 URL 长度超过浏览器可为 URL 处理的最大长度。因此,在 SP 启动的 SSO 期间始终最好使用 SP

触发 SP 启动的 SSO 流有两种方式:

访问资源

这是联盟 SSO 操作的最常见流,用户尝试访问受保护的资源,而 SSO 系统在运行时确定用户需要通过联盟 SSO 进行验证。

使用此流的用例可以是:

该流涉及以下步骤:

  1. 用户对受保护资源的浏览器请求访问权限

  2. SSO Web 代理拦截调用,确定需要对用户进行验证并发出重定向回用户的浏览器

  3. 用户的浏览器访问 SSO 服务器,由 SSO Web 代理重定向

  4. SSO 服务器确定应通过联合 SSO 对用户进行验证,选择 IdP,创建 SAML 2.0 AuthnRequest 消息,将操作状态保存在 SSO 服务器存储中,并将用户的浏览器重定向到 IdP(包含 SAML 消息和引用 SP 中操作状态的字符串)

  5. 用户的浏览器通过 AuthnRequest 消息访问 IdP SAML 2.0 服务。

插图 Accessing_Resources_Screen.jpg 的说明

IdP 收到 SAML 2.0 AuthnRequest 消息后,服务器将确定是否需要质询用户(尚未验证,会话超时 ...)。识别用户之后,联盟 SSO 流将恢复。

  1. IdP 使用包含用户信息以及验证数据的 SAML 2.0 断言创建 SSO 响应,并使用消息和 RelayState 参数将用户的浏览器重定向到 SP

  2. 用户的浏览器向 SP 服务器提供 SSO 响应

  3. SP 将验证 SAML 2.0 断言并为用户创建 SSO 会话。然后,SSO 服务器将用户的浏览器重定向回最初请求的资源

  4. 用户的浏览器请求访问资源。这次 SSO Web 代理授予对资源的访问权限

  5. Web 应用程序返回对用户浏览器的响应

插图 Accessing_Resources_Response_Screen.jpg 的说明

如前所述,此流最常用,因为联盟 SSO 仅在运行时由 SSO 服务器触发,而 SP 安全域中没有任何其他组件需要识别联盟。

调用联盟 SP 服务

此流未广泛使用,因为它意味着联盟 SSO 将通过访问 SP 服务器上的服务在 SP 上启动,并且忽略用户可能已经具有的任何现有有效会话。因此,在对以下内容产生性能影响时应避免这种情况:

使用此流的用例可以是:

使用此流的用例涉及以下步骤:

  1. 用户的浏览器通过选择性指定来访问 SP 以启动联盟 SSO 流

    1. 联盟 SSO 完成后用户浏览器应重定向到的 URL

    2. 要使用的 IdP

  2. SSO 服务器选择 IdP(如果未提供)并选择默认返回 URL(如果未提供),创建 SAML 2.0 AuthnRequest 消息,将操作状态保存在 SSO 服务器存储中,并将用户的浏览器重定向到 IdP(包含 SAML 消息和引用 SP 中操作状态的字符串)

  3. 用户的浏览器通过 AuthnRequest 消息访问 IdP SAML 2.0 服务。

插图 IdP_Service_with_AuthnRequest_Screen.jpg 的说明

IdP 收到 SAML 2.0 AuthnRequest 消息后,服务器将确定是否需要质询用户(尚未验证,会话超时 ...)。识别用户之后,联盟 SSO 流将恢复:

  1. IdP 使用包含用户信息以及验证数据的 SAML 2.0 断言创建 SSO 响应,并使用消息和 RelayState 参数将用户的浏览器重定向到 SP

  2. 用户的浏览器向 SP 服务器提供 SSO 响应

  3. SP 将验证 SAML 2.0 断言并为用户创建 SSO 会话。然后,SSO 服务器将用户的浏览器重定向回最初请求的资源

  4. 用户的浏览器请求访问资源。这次 SSO Web 代理授予对资源的访问权限

  5. Web 应用程序返回对用户浏览器的响应

插图 IdP_Service_with_Response_Screen.jpg 的说明

此流很少使用,因为会静态触发联盟 SSO,即使用户已经具有有效的 SSO 会话也是如此。此外,它还意味着 SP 安全域中的某些组件可以识别 SP 服务。

IdP 启动的 SSO

IdP 启动的 SSO 流是从 IdP 安全域启动的联盟 SSO 操作,由 IdP 联盟服务器创建联盟 SSO 响应并将用户重定向到 SP,以及响应消息和可选操作状态:

如上一节所述,消息中共享的状态不应太长,因为它可能会中断重定向 URL 长度超过浏览器可为 URL 处理的最大长度的重定向流。

当 IdP 用户需要访问 SP 托管的资源时,通常使用此流,但它不是联盟 SSO 的最佳方法,因为它忽略了用户可能已经拥有的 SP 中的任何现有有效会话。因此,在对以下内容产生性能影响时应避免这种情况:

使用此流的用例可以是:

使用此流的用例涉及以下步骤:

  1. 用户的浏览器通过指定来访问 IdP 以启动联盟 SSO 流

    1. 要使用的 SP

    2. (可选)在完成联盟 SSO 后应重定向用户浏览器的 URL

  2. 确定用户后,IdP 将使用包含用户信息以及验证数据的 SAML 2.0 断言创建 SSO 响应,并将用户的浏览器重定向到 SP 以及消息和 RelayState 参数

  3. 用户的浏览器向 SP 服务器提供 SSO 响应

  4. SP 将验证 SAML 2.0 断言并为用户创建 SSO 会话。然后,SSO 服务器将用户的浏览器重定向回最初请求的资源

  5. 用户的浏览器请求访问资源。这次 SSO Web 代理授予对资源的访问权限

  6. Web 应用程序返回对用户浏览器的响应

插图 SSO_Response_Screen.jpg 的说明

总结

如各流中所示,联邦部署的最佳方法是在 SSO 服务器认为需要时由 SSO 服务器在运行时触发。其他情况下使用静态方法并始终执行联盟 SSO 流,即使不需要(例如,如果用户已经具有有效的会话)并且执行不必要的联盟操作会影响:

更多学习资源

浏览 docs.oracle.com/learn 上的其他实验室,或在 Oracle Learning YouTube 频道上访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心