尽管设置了 Set-Cookie 标头,但调用 ASP.NET Core 6 Web API 时,Angular 项目中未设置 Cookie

问题描述 投票:0回答:1

我正在使用使用 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”以及其他变体来伪造域,但这没有效果。

angular cookies asp.net-core-webapi .net-6.0 asp.net-authorization
1个回答
1
投票

您正在尝试设置跨域cookie。尽管域名是相同的

localhost
你必须考虑端口本身。

您可以在同一域和端口下使用不同的路径运行 API 和 WebApp,

localhost:4000/api/...

或者按照这个答案,这应该可以解决您的问题。 https://stackoverflow.com/a/62777181/9090849

© www.soinside.com 2019 - 2024. All rights reserved.