SAML重播检测

时间:2018-10-24 22:38:06

标签: refresh saml replay

我们有一个基于Java的Web应用程序,该应用程序将SAML 2.0用于SSO。作为SSO的一部分,我们还实现了Single Logout。任何人都可以分享有关如何解决以下问题的信息

  • 用户登录IDP(app1)
  • 用户单击指向SP(app2)的链接
  • 用户注销IDP。 SP收到注销请求,会话无效
  • 用户刷新打开SP(app2)的浏览器,并重新提交原始IDP请求。 SP会像处理来自IDP一样处理此请求。这样,即使用户已经退出IDP,仍然可以导航/使用app2。

我认为最好的解决方案是返回IDP并检查会话(基于SAML SessionIndex是否有效),但不确定如何实现。请注意,浏览器刷新仅在指定为NotBefore和NotOnOrAfter的窗口内有效。如果用户尝试从该窗口刷新,我们将具有拒绝请求/响应的逻辑。

1 个答案:

答案 0 :(得分:0)

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