我们有一个基于 Java 的 Web 应用程序,它使用 SAML 2.0 进行 SSO。作为 SSO 的一部分,我们还实施了单点注销。任何人都可以分享有关如何解决以下问题的信息
- 用户登录 IDP(app1)
- 用户点击指向 SP(app2) 的链接
- 用户退出 IDP。SP收到注销请求,会话失效
- 用户刷新已打开 SP(app2) 的浏览器并重新提交原始 IDP 请求。SP 处理此请求,就好像它来自 IDP。有了这个,用户仍然能够导航/使用 app2,即使他已经退出 IDP。
我认为最好的解决方案是返回 IDP 并检查会话(基于 SAML SessionIndex 是否有效),但不确定我们如何做到这一点。请注意,浏览器刷新仅适用于指定 NotBefore 和 NotOnOrAfter 的窗口。如果用户尝试刷新此窗口,我们有拒绝请求/响应的逻辑。