使用一个 IdP 单点登录多个 SAML SP

使用一个 IdP 单点登录多个 SAML SP

我们的网站的一部分,比如说https://www.example.com/files,受 mod_auth_mellon 保护,它提供了一个使用我们的 IdP 进行身份验证的 SP。这很好用。

网站的其余部分是带有 samplesamlphp_auth 模块的 Drupal。该模块创建另一个使用相同 IdP 进行身份验证的 SP。这也很好用。

问题是这两个 SP 之间不共享登录信息。即使用户正在向同一个 IdP 进行身份验证,您也必须分别登录到每个 SP。显然这不是理想的做法。当我登录其中一个 SP 时,我希望另一个 SP 也能检测并使用 SAML 会话数据让我也登录。

这是合理的预期吗?我原本以为同一主机上的两个不同 SP 会自动共享会话信息,但现在我认为情况并非如此。每个 SP 都将会话信息存储在用户代理的 cookie 中。这些 cookie 有不同的名称,但更重要的是,它们引用来自不同 SP 的会话。因此它们无法共享。

此主题对该问题进行了一些讨论。基于此,我认为需要的是让 IdP 识别其在用户代理中保存的状态信息,而不是要求用户再次登录。对吗?我该如何为 IdP 管理员解决这个问题?

答案1

由于 SSO 通常是 SAML 设置的一部分,我建议检查 IdP。IdP 的工作是检查客户端是否已登录,并将同一会话报告给另一个 SP。

了解您正在处理的 IdP 和 SAML 配置文件可能会有所帮助,我的经验仅限于 WebSSO 配置文件和 Shibboleth 作为 IdP 和 SP。

好的,我将尝试详细说明一下 WebSSO 配置文件:

  1. 用户访问 SP
  2. 用户被定向到 SP 的启动器页面(例如 /Shibboleth.sso/Login)
  3. 用户使用发现服务 (DS) 选择所需的 IdP,或通过合适的参数定向到登录启动器页面
  4. 用户被重定向到 IdP,使用 SAML 身份验证请求进行身份验证
  5. 如果使用用户名/密码流程,IdP 将使用 cookie 来检查用户是否有会话。
  6. IdP 使用 SAML 响应将用户重定向回 SP
  7. SP 验证 SAML 响应并启动自己的会话处理。

查找 Shibboleth 文档对此进行详细说明这里

相关内容