【发布时间】:2011-11-23 20:28:27
【问题描述】:
我们的一位客户要求我们通过 SAML 实施单点注销 (SLO)。 SAML 服务的他们一方是身份提供者,而我们的一方是服务提供者。单点登录 (SSO) 的工作原理是使用客户端的 IdP 验证用户的凭据,然后使用允许他们直接登录的令牌将用户重定向到另一个平台上的登录页面。该平台对 SAML 一无所知,并且在特别不共享 SimpleSAMLphp 会话状态。
不过,注销需要通过两种方式进行:
如果用户点击我们平台上的注销按钮,需要将他们从我们的网站注销,然后点击 IdP 的 SLO 服务。
如果用户点击客户端或其他服务提供商端的注销按钮,客户端 IdP 将点击我们的 SP 的 SLO 服务,然后需要在重定向用户之前将其从我们的真实平台注销返回 SP 的注销响应页面。
我能够说服我们的平台在用户注销时将用户重定向到任意页面,所以我认为第一部分可以通过使用 SimpleSAML_Auth_Simple::getLogoutURL() 的页面来实现。
这样的页面在从 IdP 端访问时也可能有效,但 SAML 规范非常复杂,在我们尝试之前我无法确定。但是,config/authsources.php 中的 SP 配置不接受 SingleLogoutService 参数; /www/module.php/saml/sp/metadata.php/entityid 生成的元数据仍将 /www/module.php/saml/sp/saml2-logout.php/entityid 列为 SingleLogoutService 位置。如果该页面是清除 SimpleSAMLphp 会话所必需的,那很好,但我需要知道如何插入将用户从我们的平台注销所需的额外重定向。
我尝试搜索示例,但得到的只是 API 参考。很高兴知道如何在不尝试设置自己的 IdP 的情况下测试注销;是否有类似openidp.feide.no 的服务可以处理 SLO 和 SSO?
【问题讨论】:
-
看看Shibboleth。
-
@JaredFarrish:那里的软件似乎是基于 Java 的,我们被要求使用 PHP 来制作歇斯底里的葡萄干。如果你指的是协议,它是由客户决定的;两者是相关的,但我完全不确定它们是否完全兼容。说服一个真正的 SAML 包与客户的服务对话已经够难的了。