0

我们有一个基于 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 的窗口。如果用户尝试刷新此窗口,我们有拒绝请求/响应的逻辑。

4

1 回答 1

0

SP 还应检查 SAML 断言重放。每个 SAML 断言都包含一个唯一 ID。您的 SP 应该跟踪这些直到它们过期(即直到 NotOnOrAfter)。当您收到 SAML 断言时,如果您的 SP 已经看到该 ID,则应拒绝 SAML 断言。

于 2018-10-25T01:13:08.233 回答