SP 与 IdP 启动的 SSO
本文讨论了两个联盟部署之间的 SP 和 IdP 启动的 SSO 的概念以及这两个流之间的区别。
本文还介绍了在联盟 SSO 期间 IdP 与 SP 共享的用户状态或返回 URL 的概念,该概念称为:
-
RelayState表示 SAML 1.1 的 SAML 2.0 TARGET,wctx表示 WS-Fed 1.1 -
openid.return_to表示 OpenID 2.0(返回 SSO) -
URL 可以包含表示 SP 中用户状态的查询参数 )
本文展示了使用 SAML 2.0 协议的示例,但其他协议也是如此。
联盟 SSO 流
拓扑
典型的联盟部署由以下实体组成:
-
IdP服务器的安全域,其中用户具有帐户并进行验证 -
SP 服务器的安全域
-
SP 联盟服务器
-
SSO 服务器(有时 SSO 服务器和 SP 联盟服务器是同一实体)
-
与 SSO 服务器集成的 SSO Web 代理,保护资源并确保对用户进行验证并授权其访问资源。不执行此操作可能会导致验证流或授权失败
-
资源或 Web 应用程序

-
SP 启动的 SSO
SP 启动的 SSO 流是从 SP 安全域启动的联盟 SSO 操作,由 SP 联盟服务器创建联盟验证请求并将用户重定向到 IdP,其中包含消息和一些表示操作状态的短字符串:
-
联盟验证请求因所使用的协议而异:
-
SAML 2.0:AuthnRequest
-
SAML 1.1:带有表示 SP 的参数的 URL
-
WS-Fed:一个 URL,其
wtrealm参数表示 SP 和其他可选参数 -
OpenID 2.0:OpenID 2.0 请求
-
-
操作状态(用户在联邦 SSO 操作启动之前所执行的操作)在发送给用户的消息(而不是整个状态)中传达,而是作为指向 SP 服务器运行时存储中状态的指针。IdP根据协议,此信息的传送方式不同:
-
SAML 2.0:
RelayState参数 -
SAML 1.1:TARGET 参数
-
WS-Fed:
wctx参数 -
OpenID 2.0:
openid.return_to参数,该参数是一个 SP URL,在 IdP 上验证后将重定向用户,由 SP 在运行时生成,因此可以包含引用运行状态的查询参数
-
请注意操作状态:通常,消息中共享的状态不应太长,因为它可能会中断重定向流,重定向 URL 长度超过浏览器可为 URL 处理的最大长度。因此,在 SP 启动的 SSO 期间始终最好使用 SP
-
将操作状态存储在 SP 的内存/数据库存储中
-
以
RelayState/TARGET/wctx身份发送指向操作状态的指针
触发 SP 启动的 SSO 流有两种方式:
-
用户请求访问启动联盟 SSO 流的资源。执行联盟 SSO 操作后,用户将首先重定向回请求的资源。
-
或者用户直接访问 SP 服务器上的服务,以使用远程 IdP 专门启动联盟 SSO 流。在这种情况下,用户通常会提供在执行联盟 SSO 操作后应重定向用户的 URL
访问资源
这是联盟 SSO 操作的最常见流,用户尝试访问受保护的资源,而 SSO 系统在运行时确定用户需要通过联盟 SSO 进行验证。
使用此流的用例可以是:
-
用户单击任何引用受保护资源的页面上的链接
-
用户单击门户页上引用受保护资源的链接
-
用户具有受保护资源的书签
该流涉及以下步骤:
-
用户对受保护资源的浏览器请求访问权限
-
SSO Web 代理拦截调用,确定需要对用户进行验证并发出重定向回用户的浏览器
-
用户的浏览器访问 SSO 服务器,由 SSO Web 代理重定向
-
SSO 服务器确定应通过联合 SSO 对用户进行验证,选择
IdP,创建 SAML 2.0 AuthnRequest 消息,将操作状态保存在 SSO 服务器存储中,并将用户的浏览器重定向到IdP(包含 SAML 消息和引用 SP 中操作状态的字符串) -
用户的浏览器通过 AuthnRequest 消息访问
IdPSAML 2.0 服务。

插图 Accessing_Resources_Screen.jpg 的说明
IdP 收到 SAML 2.0 AuthnRequest 消息后,服务器将确定是否需要质询用户(尚未验证,会话超时 ...)。识别用户之后,联盟 SSO 流将恢复。
-
IdP使用包含用户信息以及验证数据的 SAML 2.0 断言创建 SSO 响应,并使用消息和RelayState参数将用户的浏览器重定向到 SP -
用户的浏览器向 SP 服务器提供 SSO 响应
-
SP 将验证 SAML 2.0 断言并为用户创建 SSO 会话。然后,SSO 服务器将用户的浏览器重定向回最初请求的资源
-
用户的浏览器请求访问资源。这次 SSO Web 代理授予对资源的访问权限
-
Web 应用程序返回对用户浏览器的响应

插图 Accessing_Resources_Response_Screen.jpg 的说明
如前所述,此流最常用,因为联盟 SSO 仅在运行时由 SSO 服务器触发,而 SP 安全域中没有任何其他组件需要识别联盟。
调用联盟 SP 服务
此流未广泛使用,因为它意味着联盟 SSO 将通过访问 SP 服务器上的服务在 SP 上启动,并且忽略用户可能已经具有的任何现有有效会话。因此,在对以下内容产生性能影响时应避免这种情况:
-
作为联盟 SSO 的服务器非常昂贵(某些协议的 XML、保护消息的数字签名、服务器之间的通信)
-
用户的浏览器体验将在不同的域之间重定向,从而导致延迟,用户才能访问目标受保护的资源。
使用此流的用例可以是:
-
用户单击任何页面上引用受保护资源的链接(异常)
-
用户单击门户页上引用受保护资源的链接
使用此流的用例涉及以下步骤:
-
用户的浏览器通过选择性指定来访问 SP 以启动联盟 SSO 流
-
联盟 SSO 完成后用户浏览器应重定向到的 URL
-
要使用的
IdP
-
-
SSO 服务器选择
IdP(如果未提供)并选择默认返回 URL(如果未提供),创建 SAML 2.0 AuthnRequest 消息,将操作状态保存在 SSO 服务器存储中,并将用户的浏览器重定向到IdP(包含 SAML 消息和引用 SP 中操作状态的字符串) -
用户的浏览器通过 AuthnRequest 消息访问
IdPSAML 2.0 服务。

插图 IdP_Service_with_AuthnRequest_Screen.jpg 的说明
IdP 收到 SAML 2.0 AuthnRequest 消息后,服务器将确定是否需要质询用户(尚未验证,会话超时 ...)。识别用户之后,联盟 SSO 流将恢复:
-
IdP使用包含用户信息以及验证数据的 SAML 2.0 断言创建 SSO 响应,并使用消息和RelayState参数将用户的浏览器重定向到 SP -
用户的浏览器向 SP 服务器提供 SSO 响应
-
SP 将验证 SAML 2.0 断言并为用户创建 SSO 会话。然后,SSO 服务器将用户的浏览器重定向回最初请求的资源
-
用户的浏览器请求访问资源。这次 SSO Web 代理授予对资源的访问权限
-
Web 应用程序返回对用户浏览器的响应

插图 IdP_Service_with_Response_Screen.jpg 的说明
此流很少使用,因为会静态触发联盟 SSO,即使用户已经具有有效的 SSO 会话也是如此。此外,它还意味着 SP 安全域中的某些组件可以识别 SP 服务。
IdP 启动的 SSO
IdP 启动的 SSO 流是从 IdP 安全域启动的联盟 SSO 操作,由 IdP 联盟服务器创建联盟 SSO 响应并将用户重定向到 SP,以及响应消息和可选操作状态:
-
联盟 SSO 响应因所使用的协议而异:
-
SAML 2.0:带断言的 SAMLResponse
-
SAML 1.1:使用断言的响应
-
WS-Fed:带断言的响应
-
OpenID 2.0:OpenID 2.0 响应
-
-
此流中的可选操作状态传达在 SP 中完成联盟 SSO 后用户应重定向到的 URL。如果缺失,SP 必须确定应将用户重定向到的位置。根据协议,此信息的传送方式不同:
-
SAML 2.0:
RelayState参数 -
SAML 1.1:
TARGET参数 -
WS-Fed:
wctx参数 OpenID 2.0:此协议不支持IdP启动的 SSO 流。
-
如上一节所述,消息中共享的状态不应太长,因为它可能会中断重定向 URL 长度超过浏览器可为 URL 处理的最大长度的重定向流。
当 IdP 用户需要访问 SP 托管的资源时,通常使用此流,但它不是联盟 SSO 的最佳方法,因为它忽略了用户可能已经拥有的 SP 中的任何现有有效会话。因此,在对以下内容产生性能影响时应避免这种情况:
-
作为联盟 SSO 的服务器非常昂贵(某些协议的 XML、保护消息的数字签名、服务器之间的通信)
-
用户的浏览器体验将在不同的域之间重定向,从而导致延迟,用户才能访问目标受保护的资源。
使用此流的用例可以是:
- 用户单击
IdP门户页面上引用 SP 上受保护资源的链接。
使用此流的用例涉及以下步骤:
-
用户的浏览器通过指定来访问
IdP以启动联盟 SSO 流-
要使用的 SP
-
(可选)在完成联盟 SSO 后应重定向用户浏览器的 URL
-
-
确定用户后,
IdP将使用包含用户信息以及验证数据的 SAML 2.0 断言创建 SSO 响应,并将用户的浏览器重定向到 SP 以及消息和RelayState参数 -
用户的浏览器向 SP 服务器提供 SSO 响应
-
SP 将验证 SAML 2.0 断言并为用户创建 SSO 会话。然后,SSO 服务器将用户的浏览器重定向回最初请求的资源
-
用户的浏览器请求访问资源。这次 SSO Web 代理授予对资源的访问权限
-
Web 应用程序返回对用户浏览器的响应

插图 SSO_Response_Screen.jpg 的说明
总结
如各流中所示,联邦部署的最佳方法是在 SSO 服务器认为需要时由 SSO 服务器在运行时触发。其他情况下使用静态方法并始终执行联盟 SSO 流,即使不需要(例如,如果用户已经具有有效的会话)并且执行不必要的联盟操作会影响:
-
服务器的性能(CPU、LDAP/RDBMS 交互 ...)
-
用户的响应时间,基于执行涉及重定向的联盟 SSO 操作所需的时间。
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或在 Oracle Learning YouTube 频道上访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。