我正在研究将 OpenID 连接用作我们的企业应用程序(面向消费者)的 SSO 协议。总的来说,它的大多数方面都符合我们的需求,除了它能够处理单次注销并希望对此提供一些指导。
我有机会查看了最新的 OIDC 会话管理规范,以及涉及类似主题的几个堆栈溢出问题:
正如 ping 的人所说,单次注销的处理方式与 SAML2 不同,因为它更以用户为中心。这一切都很好,但仍然感觉不适合实际单次注销的需求。具体来说,以用户为中心的处理(通过有点笨拙的 iframe 通信)仅适用于当前浏览器视图,但不适用于当前未查看的 RP。
例如,用户使用特定的 OP 登录到 RP A、B 和 C。单次注销只会触发浏览器正在查看的那些 RP 的注销;这将使其他会话挥之不去,这可能是一个安全问题。(如果我对此分析有误,请更正)。
我已经看到了一些在协议之外工作的解决方案(例如父域 cookie,或者可能(??)相同的会话存储),但不幸的是,这些解决方案不符合我的需求。
我想看看我是否错过了有关 OIDC 规范的一些内容,该规范建议使用单一注销协议,涵盖类似于 SAML2 自己的单一注销的用例?(也许是一些直接的 OP-> RP 通信?甚至是客户端“通过 RP 迭代”注销?)。还是我真的要靠自己为它开发专有解决方案?
顺便说一句,我也很好奇 OIDC 委员会是否已经讨论过这个问题(我相信它已经讨论过),以及它是否在要解决的路线图上。
在此先感谢您的帮助!