ASP.NET 核心 6 - Cookie 被返回但未存储在浏览器中

ASP.NET Core 6 - Cookie gets returned but not stored in browser

我在 Asp.Net Core 6.0

中遇到 Cookie 身份验证问题

我已经实施并配置了 Cookie 身份验证,我面临的问题如下。

当向 <domain>/api/account/login 处的登录端点发送 POST 请求时,登录 returns 200 OK 响应和正确的 cookie。

但是,Cookie 并未存储在浏览器中。

Cookie 配置

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
      options.Cookie.Name = "Affito.Identity";
      options.Cookie.HttpOnly = true;
      options.Cookie.SecurePolicy = CookieSecurePolicy.None;
      options.Cookie.SameSite = (SameSiteMode) (-1);
      options.SlidingExpiration = true;
      options.Cookie.Domain = ".affito.ch";
      options.ExpireTimeSpan = TimeSpan.FromMinutes(3);
      options.Cookie.IsEssential = true;
    });

  services.Configure<CookiePolicyOptions>(options =>
  {
    options.MinimumSameSitePolicy = (SameSiteMode)(-1);
    options.HttpOnly = HttpOnlyPolicy.None;
    options.Secure = CookieSecurePolicy.None;
  });

因为我有多个需要使用同一个 cookie 的子域,所以我在 options.Cookie.Domain.

中有 .domain 属性

这是发送登录请求后浏览器网络选项卡的响应

但是,Cookie 已返回,但未存储在浏览器中以供将来请求使用。

我正在从 React-App 发送一个简单的获取请求:

const response = await fetch(BASEURL + "/account/login", {
  method: "POST",
  body: JSON.stringify(loginData),
  headers: {
    "Content-Type": "application/json",
  },
});

console.log(response);

};

我是不是遗漏了什么或者为什么它没有在浏览器中存储 cookie。 我已经查阅了文档,但无法弄清楚。

大摇大摆: 当从 swagger 发送请求时,它 returns 相同的 cookie 并将其正确存储在浏览器中。

我猜它与 'SameSite' 限制有关,所以我将其取出,但从 stage."domain"[=45] 发送请求时它仍然不起作用=]

我所要做的就是添加正确的 CORS 策略。如果您希望在未来的请求中存储和包含 Cookie,则必须将 Origins 和 .WithCredentials() 属性添加到 Cors 策略中。

它可能看起来像这样:

service.AddCors(options =>
    {
      options.AddPolicy("PolicyName", builder =>
      {
        builder
          .WithOrigins("http://localhost:3000", "https://example.com")
          .AllowAnyHeader()
          .AllowAnyMethod()
          .AllowCredentials();
      });
    });