我们使用 Shibboleth 对用户进行身份验证。它工作得很好。
问题是,在进入用户/注销(并且,我认为实际上是注销)之后,用户会立即自动重新验证!
有什么解决方案浮现在脑海中?
谢谢!
我们使用 Shibboleth 对用户进行身份验证。它工作得很好。
问题是,在进入用户/注销(并且,我认为实际上是注销)之后,用户会立即自动重新验证!
有什么解决方案浮现在脑海中?
谢谢!
这是一个中等复杂的问题,取决于您想要实现的目标。坏消息是,据应该知道的人说,SingleLogOff 基本上不起作用,因为至少本地应用程序可能会缓存登录信息,并且没有可靠的方法告诉所有人注销您。
但是,注销服务提供者的特定会话可能就像发送您的用户一样简单,
https://yourhost/Shibboleth.sso/Logout?return=http://www.google.com
这将破坏该会话并将用户重定向到给定的 URL。
要销毁与 IdP 的会话,您可能需要一种方法来清除_idp_session
IdP 设置的 cookie,如果您控制 IdP 而不是如果您不控制,这很容易。(shibd SP 也支持告诉 IdP 注销 IdP 会话,但 IdP 不支持。)
SHIB 3 发布后编辑
Shibboleth 3 现在支持SLO。
单点注销不起作用 - 不要费心寻找它;您可以从 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 次调用即可失败,并且您的注销过程未完成)。
@user353829 在 SSO 世界中真正注销的唯一方法是终止浏览器会话
好吧……那是部分正确的。一般而言,SAML2(Shibboleth 实现)提供了单次注销规范(第 32 页)。问题是,实现起来非常棘手(阅读@Ulrich Schwarz 提供的 SLOIssues),更糟糕的是,如果培训您的用户正确理解 Global Logout(再次仔细阅读SLOIssues)。
但是,如果您完全确定您了解 SLO 的真正工作原理,那么匈牙利团队创建了有效的实现。
我目前正在测试它,我已经成功地将它与我的Facebook 登录模块集成。而且效果很好。
请记住,这个匈牙利语模块没有出现在最新的官方 Shibboleth 版本中是有原因的。
希望有帮助