Cross domain cookie?

Cross domain cookie?
hercules
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 2 lata
  • Postów:77
0

Cześć walczę właśnie z wymianą ciastek miedzy aplikacją Frontend (angular) a backend (Api .NET Core)

W .NET Core mam:

Kopiuj
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:

Kopiuj
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

Kopiuj
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ę

Kopiuj
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

Kopiuj
HttpContext.User.Identity.IsAuthenticated

zwraca true

Jak z localhost:4200 strzelę w dowolny enpoint localhost:44363

Kopiuj
HttpContext.User.Identity.IsAuthenticated

zwraca false

Czy to jest kwestia ustawień Corsów? Może ktoś pomóc jak to ustawić?

edytowany 3x, ostatnio: cerrato
99xmarcin
  • Rejestracja:około 5 lat
  • Ostatnio:5 miesięcy
  • Postów:2420
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.


Holy sh*t, with every month serenityos.org gets better & better...
edytowany 1x, ostatnio: 99xmarcin
hercules
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 2 lata
  • Postów:77
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

99xmarcin
tu: https://stackoverflow.com/a/24689738 Pokaż jak wygląda pre-flight (OPTIONS) które wysyła przeglądarka (Headery mnie najbardziej interesują) oraz odpowiedź jaką dostaje

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.