Cross domain cookie?

0

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ć?

2

Ciastka zlewają port więc powinno działać. Ale być może mają ustawioną flagę Secure:: https://docs.microsoft.com/en-us/dotnet/api/system.web.httpcookie.secure?redirectedfrom=MSDN&view=netframework-4.8#System_Web_HttpCookie_Secure

Ponieważ bądz co bądz są ustawione przez API wystawiane jako HTTPS.

Dlatego osobiście wolę JWT tokeny, o wiele bardziej przewidywalne.

0

Wystawiłem angulara po https (https://localhost:4200) i już widzę to ciastko w przeglądarce!
Ale nadal w requestach angularowych ciastko nie leci na serwer mimo ustawienia flagi withCredentials po stronie angulara

1 użytkowników online, w tym zalogowanych: 0, gości: 1