SameSite 属性中断 SAML 流

Posted

技术标签:

【中文标题】SameSite 属性中断 SAML 流【英文标题】:SameSite attribute break SAML flow 【发布时间】:2020-05-20 22:09:50 【问题描述】:

Chrome 80 将引入一个新属性,即 SameSite。

严格 - 仅为“同一站点”请求附加 cookie。 Lax - 为“同一站点”请求发送 cookie,以及使用安全 HTTP 方法(例如(获取头部选项跟踪)。 无 - 为所有“相同站点”和“跨站点”请求发送 cookie。

如需了解更多信息,this article 很好地解释了 SameSite。

来自 Azure 文档:

云服务(服务提供者)使用 HTTP 重定向绑定将 AuthnRequest(身份验证请求)元素传递给 Azure AD(身份提供者)。然后,Azure AD 使用 HTTP 发布绑定将 Response 元素发布到云服务

我的问题是为什么 SameSite 会破坏 SAML 流程? ????"saml" samesite problem

当 IdP POST 响应返回给 SP 时,如果 SameSite=Lax,用户代理将不会发送具有 SP 域的 cookie。即使它不发送 cookie,我也不认为 SP 有任何问题。

【问题讨论】:

【参考方案1】:

当 IdP POST 响应返回给 SP 时,如果 SameSite=Lax,用户代理将 不发送具有 SP 域的 cookie。即使它不发送cookies 我认为 SP 没有任何问题。

在 IdP-init 上,可能不会有任何问题,因为在发送的 SAML 响应之外没有任何状态。

但是,SP-init 流很可能会被破坏。原因是大多数 SP 产品通过在将用户发送到 IdP 之前设置的 cookie 来跟踪浏览器会话。浏览器被重定向到 IdP,经过身份验证,然后通过 POST 响应发送回 SP。如果 cookie 没有设置为 SameSite=None;Secure(不要忘记 - 需要 SameSite=None 的 cookie 也必须设置为 Secure),那么 SP 的 cookie 将不会通过 POST 传递回 SP ,因此 SP 没有安全配置会话所需的所有部分。

一种看待它的方式就像用户需要两组密钥来在 SP 建立一个安全会话:第一个是它想要从 cookie 中获得会话密钥,另一个是它想要密钥来自 IdP。

【讨论】:

【参考方案2】:
>> Even if it does not send cookies I don't see there is any problem with SP.

如果 IdP cookie 未通过 SameSite=None 正确设置,则它不会在 SP 向 IdP 的请求中发送,并且会要求用户再次登录 IdP。

来源:https://support.okta.com/help/s/article/FAQ-How-Chrome-80-Update-for-SameSite-by-default-Potentially-Impacts-Your-Okta-Environment

这就是 Shibboleth IDP 所做的事情:https://issues.shibboleth.net/jira/browse/IDP-1476

【讨论】:

感谢您的资源。嗯,您的意思是 SP 将 AuthnRequest 发送给 IdP 对。 SP 使用 POST Binding 是这样,SP 使用 Redirect Binding 没问题。 顺便说一句,为什么选择 POST 而不是重定向绑定?嗯,是不是因为POST消息可以有容量? 永远不应该使用重定向来向 SP 呈现断言,这是一个巨大的数据泄漏问题,因为任何具有完整 URL 的东西(比如分散在各个入口/出口点的各种日志等) .) 拥有关于断言的所有信息。

以上是关于SameSite 属性中断 SAML 流的主要内容,如果未能解决你的问题,请参考以下文章

SameSite=None w/ IE11 中的安全中断 iFrame

对于涉及跨域请求的 SSO 流,在 iOS 12 中阻止了强制执行 SameSite 策略的 Cookie

映射 SAM L10 设备的中断处理程序

演员 - 临时流中断 - 恢复原始

终止或中断java 8流循环[重复]

VST 音频插件如何检测来自 VST 主机的流中断?