Cześć walczę właśnie z wymianą ciastek miedzy aplikacją Frontend (angular) a backend (Api .NET Core)
W .NET Core mam:
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(x=> {
x.Cookie.HttpOnly = true;
x.Cookie.Name = "access_cookie";
x.Cookie.SameSite = Microsoft.AspNetCore.Http.SameSiteMode.None;
x.Cookie.Domain = "localhost";
});
ustawienia CORSów:
services.AddCors(options =>
{
options.AddPolicy("EnableCORS", builder =>
{
builder
.AllowAnyHeader()
.AllowAnyMethod()
// .AllowAnyOrigin();
.SetIsOriginAllowed(x=> x.Contains("localhost"))
//.SetIsOriginAllowed((host) => true)
.AllowCredentials();
});
});
i użycie CORSów
app.UseCors("EnableCORS");
W angularze każdy request idzie z withCredentials = true
Odpalając lokalnie aplikacje mam na różnych portach
API: https://localhost:44363/
Angular: http://localhost:4200
No i strzelam Angularem do endpointu API gdzie wywołuję
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity), authProperties);
I teraz jak otworze jakiś URL z https://localhost:44363/ widzę ciastko w przeglądarce (httpOnly).
Jak otworzę localhost:4200 już nie widzę tego ciastka.
Jak z localhost:44363 strzelę w dowolny endpoint localhost:44363
HttpContext.User.Identity.IsAuthenticated
zwraca true
Jak z localhost:4200 strzelę w dowolny enpoint localhost:44363
HttpContext.User.Identity.IsAuthenticated
zwraca false
Czy to jest kwestia ustawień Corsów? Może ktoś pomóc jak to ustawić?
99xmarcin