浏览器忽略CORS响应中的set-cookie标头(asp.net core 2.0 Web API)

Dan*_*n Z 4 cors asp.net-core-2.0

我有一个Angular 4应用程序,该应用程序在不同的服务器上调用使用asp.net core 1.1构建的Web api。前端和后端均配置为启用CORS。一切工作正常,直到后端升级到asp.net core 2.0。然后浏览器停止尊重从Web api发送的响应中的Set-Cookie标头。由于Web API使用Cookie进行会话管理,因此该应用程序停止了工作

Dan*_*n Z 6

在2.0版中,asp.net核心引入了一种新的行为:默认情况下,它向所有set-cookie标头添加一个“ samesite = lax”属性,从而有效地禁用了CORS。解决方案是在Startup.ConfigureServices中显式覆盖此默认行为:

           services.AddSession(options =>
        {
            options.Cookie.SameSite = Microsoft.AspNetCore.Http.SameSiteMode.None;
        });
Run Code Online (Sandbox Code Playgroud)

找到这个解决方案花了我很多时间,主要是因为在升级到2.0之后应用程序并没有立即中断,因此我将大部分精力都花在了寻找前端的罪魁祸首上。
它没有立即中断的原因是

  1. 我从事Firefox的大部分开发工作,在57.0版中,它似乎仍然不尊重(有些新的)samesite属性。
  2. 即使在Chrome浏览器中,问题也没有出现在我的计算机上,因为从升级之前开始,该站点已经存在一个旧的Cookie,但未设置该属性。

在确定并解决了问题之后,我发现了来自其他开发人员的文章,这些开发人员来自与asp.net不同的平台,他们也遭受了由于此新引入的属性导致的意外问题。我希望我在这里写的内容可以使其他人免于遭受同样的痛苦。

  • 是的,我发现了我的问题。我的网站位于Azure上,而azure自己的cors设置是“控制cors”。我清除了该列表,现在知道了。网络核心的核心设置进行控制。 (2认同)