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();
});
});
我在 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();
});
});