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