.NET程序中如何解决Google Chrome浏览器iframe禁止跨域的SameSite的Cookie设置

这个问题是我们总部的一个外部应用,给到我们的客户每家一个iframe的嵌套页面,通过计算handshake的动态值,实现免登录的。这其中用到了Cookie和服务器端的Form认证。

伴随着谷歌浏览器(80版本之后对cookie的校验更加严格,SameSite属性默认值由None变为Lax)的升级,iframe中的Cookie跨域被默认禁用了,除非SameSite为None并Secure属性为True(强制SSL启用HTTPS访问)

经过印度第三方外包公司45天的调查处理,仍未解决。

经过远程会议,了解了现在团队已经做过的尝试,大的方向没错,目前未能解决的问题是

无法将2个Cookie的SameSite写成None

.ASPXAUTH
ASP.NET_SessionId

一开始我以为改用最原始的HTTPCookie的方式写就行了,但是这两个Cookie就是无法赋值。微软官网建议的在Web.config和Global.asax设置也没用。

好在透过Google看到有人提到用URL Rewrite工具,果然有效。

最终解决方案,用URL重写工具,在system.webServer节点写入Outbound规则如下:

    <rewrite>
      <outboundRules>
        <rule name="AddSameSiteCookieFlag">
          <match serverVariable="RESPONSE_Set-Cookie" pattern="^(.*)(ASP.NET|ASPXAUTH|SessionId)(=.*)$" />
          <action type="Rewrite" value="{R:0};SameSite=None" />
        </rule>
      </outboundRules>
    </rewrite>

而原有的<forms />认证信息中,必须加入requireSSL=”true”,总共涉及9行代码。

最终印度第三方外包公司的同事高高兴兴的去部署到服务器了。

Loading