我正在使用使用 cookie 身份验证的 ASP.NET Core 6 Web API 后端和 Angular 前端。
后端API运行在
http://localhost:5001
上,并使用Swagger进行测试。
当我通过 Swagger 调用登录端点时,在 localhost 域下的浏览器中成功设置了 cookie。 但是,当我使用 NSwag 生成的客户端从 Angular 应用程序(在
http://localhost:4200
上运行)发出相同的请求时,调用成功,但尽管有 Set-Cookie 标头,但未设置 cookie。
这是我在后端的身份验证和 cookie 设置:
services.AddAuthentication(options =>
{
options.DefaultScheme = PrimaryScheme.Name;
options.RequireAuthenticatedSignIn = true;
})
.AddCookie(PrimaryScheme.Name, options =>
{
options.ExpireTimeSpan = TimeSpan.FromDays(7);
options.Cookie.Name = PrimaryScheme.Name;
options.Cookie.IsEssential = true;
options.Cookie.SameSite = SameSiteMode.Strict;
options.Cookie.HttpOnly = true;
options.Cookie.SecurePolicy = CookieSecurePolicy.None;
})
这是我在 .NET 后端的 CORS 策略:
options.AddPolicy("CorsPolicy", policy => policy
.WithOrigins("http://localhost:4200")
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
尽管进行了此设置,但从 Angular 发出请求时,尽管登录调用成功,但 cookie 并未存储在浏览器中。
我尝试将 cookie 的域设置为“localhost”以及其他变体来伪造域,但这没有效果。
您正在尝试设置跨域cookie。尽管域名是相同的
localhost
你必须考虑端口本身。
您可以在同一域和端口下使用不同的路径运行 API 和 WebApp,
localhost:4000/api/...
或者按照这个答案,这应该可以解决您的问题。 https://stackoverflow.com/a/62777181/9090849