浏览器忽略来自CORS响应的set-cookie头(asp.net core 2.0 web api)

时间:2018-01-05 07:21:39

标签: cors asp.net-core-2.0

我有一个Angular 4应用程序在另一台服务器上调用使用asp.net core 1.1构建的web api。前端和后端都配置为启用CORS。一切都很好,直到后端升级到asp.net核心2.0。然后浏览器停止尊重从web api发送的repsonses中的Set-Cookie标头。由于web api使用cookie进行会话管理,应用程序停止工作

1 个答案:

答案 0 :(得分:4)

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

           services.AddSession(options =>
        {
            options.Cookie.SameSite = Microsoft.AspNetCore.Http.SameSiteMode.None;
        });

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

  1. 我在Firefox中进行了大部分的开发工作,而对于版本57.0,它似乎仍然不尊重(有些新的)同一地点属性。
  2. 即使在Chrome中,问题也没有显示在我的计算机上,因为在升级之前已存在旧网站的cookie,而且没有设置属性。
  3. 在确定并解决问题之后,我发现了来自其他开发人员的文章,这些文章来自不同于asp.net的平台,他们也遇到了由这个新引入的属性引起的意外问题。我希望我在这里所写的内容可以帮助其他人避免经历同样的痛苦。

相关问题