1

我们使用 Shibboleth 对用户进行身份验证。它工作得很好。

问题是,在进入用户/注销(并且,我认为实际上是注销)之后,用户会立即自动重新验证!

有什么解决方案浮现在脑海中?

谢谢!

4

3 回答 3

3

这是一个中等复杂的问题,取决于您想要实现的目标。坏消息是,据应该知道的人说,SingleLogOff 基本上不起作用,因为至少本地应用程序可能会缓存登录信息,并且没有可靠的方法告诉所有人注销您。

但是,注销服务提供者的特定会话可能就像发送您的用户一样简单, https://yourhost/Shibboleth.sso/Logout?return=http://www.google.com这将破坏该会话并将用户重定向到给定的 URL。

要销毁与 IdP 的会话,您可能需要一种方法来清除_idp_sessionIdP 设置的 cookie,如果您控制 IdP 而不是如果您不控制,这很容易。(shibd SP 也支持告诉 IdP 注销 IdP 会话,但 IdP 不支持。)

SHIB 3 发布后编辑

Shibboleth 3 现在支持SLO

于 2012-07-06T07:58:06.133 回答
1

单点注销不起作用 - 不要费心寻找它;您可以从 SP 中注销 - 但没有真正的方法可以从 IdP 的 SSO 链中注销。

Shibboleth IdP 是一个 SSO,它缓存了一个覆盖 SP 上任何注销的 cookie(解决此问题的唯一方法是在 SP 注销后强制用户在 SP 上进行身份验证 - SAML 配置 - 这实际上意味着 SP不再接受 SSO)。

杀死 IdP cookie 只会阻止未来的 SSO - 它不会从任何预先存在的会话中注销用户。

在 SSO 世界中真正注销的唯一方法是终止浏览器会话(每种浏览器类型都有不同的方式)。

有所谓的 SLO 代理 - 在 SSO 会话中尝试访问每个访问过的 SP,以单独注销,然后终止 IdP 会话:这在有多个 SP 的 SSO 环境中根本不切实际(只需对一个 SP 进行 1 次调用即可失败,并且您的注销过程未完成)。

于 2012-07-07T06:58:57.430 回答
0

@user353829 在 SSO 世界中真正注销的唯一方法是终止浏览器会话

好吧……那是部分正确的。一般而言,SAML2(Shibboleth 实现)提供了单次注销规范(第 32 页)。问题是,实现起来非常棘手(阅读@Ulrich Schwarz 提供的 SLOIssues),更糟糕的是,如果培训您的用户正确理解 Global Logout(再次仔细阅读SLOIssues)。

但是,如果您完全确定您了解 SLO 的真正工作原理,那么匈牙利团队创建了有效的实现。

我目前正在测试它,我已经成功地将它与我的Facebook 登录模块集成。而且效果很好。

请记住,这个匈牙利语模块没有出现在最新的官方 Shibboleth 版本中是有原因的。

希望有帮助

于 2012-12-10T11:16:50.303 回答