【问题标题】:Browser ignoring set-cookie header from CORS response (asp.net core 2.0 web api)浏览器忽略 CORS 响应中的 set-cookie 标头(asp.net core 2.0 web api)
【发布时间】:2018-06-14 23:48:39
【问题描述】:

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

【问题讨论】:

    标签: cors asp.net-core-2.0


    【解决方案1】:

    在 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 版中,它似乎仍然不尊重(有些新的)samesite 属性。
    2. 即使在 Chrome 中,问题也没有出现在我的机器上,因为在升级之前已经存在该站点的旧 cookie,它没有设置属性。

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

    【讨论】:

    • 您对 cors 和 cookie 的其他设置是什么。我有这些 cookie .AddCookie("localhost", options => { options.Cookie.Domain = "localhost"; options.Cookie.Name = "localhost_access_token"; options.Cookie.SameSite = SameSiteMode.None; options.LoginPath = "/login"; options.LogoutPath = "/login"; }) 这与 cors options.AddPolicy("AllowAllOriginsForMusiple", builder => { builder .WithOrigins("localhost:4200").AllowAnyHeader().AllowAnyMethod().AllowCr…;});
    • 目前我收到此异常:“响应中的 'Access-Control-Allow-Origin' 标头的值不能是通配符 ''”我怎样才能获得 .net核心将 Access-Control-Allow-Origin 设置为
    • @JanneHarju - 我拥有的唯一设置是上面在 Startup.ConfigureServices 中列出的设置,以及 Startup.Configure 中的以下设置:app.UseCors(options => options.AllowAnyOrigin().AllowAnyHeader() .AllowAnyMethod().AllowCredentials());我从来没有遇到过通配符的任何问题。响应中的 Access-Control-Allow-Origin 标头始终是完整的 url。
    • 是的,我发现了我的问题。我的网站在 Azure 上,并且 azure 自己的 cors 设置是控制 cors。我清除了该列表,现在我得到了。 Net core 的 cors 设置来控制。
    • 这对我来说不太有效,但给了我需要的线索。对我来说,我将此添加到我的 ConfigureServices services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options => { options.Cookie.SameSite = SameSiteMode.None; });
    猜你喜欢
    • 2021-01-26
    • 2021-02-25
    • 2019-03-26
    • 2019-03-16
    • 1970-01-01
    • 2023-03-25
    • 2011-09-27
    • 2014-08-24
    • 2013-02-08
    相关资源
    最近更新 更多