• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Angulars nie wysyła cookies

Object Storage Arubacloud
0 głosów
387 wizyt
pytanie zadane 4 stycznia 2021 w JavaScript przez michal_php Stary wyjadacz (13,700 p.)
zamknięte 5 stycznia 2021 przez michal_php

Cześć.

Mam problem w sowim projekcie z wysyłanie nagłówków cookies przez Angulara 9.

Klasa dodająca do nagłówek authenticaation i cookies

@Injectable()
export class JwtInterceptor implements HttpInterceptor {

  constructor(
    private authenticationService: AuthenticationServiceService,
    private cookiesService: CookieService,
    ) {
  }

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

    const cookies = this.cookiesService.get('2fa_auth');
    const currentUser = this.authenticationService.currentUserValue;

    if (currentUser && currentUser.token) {

      req = req.clone({
        setHeaders: {
          Authorization: `Bearer ${currentUser.token}`,
          Cookie: `2fa_auth=${cookies};`,
        }
      });
    }
    
    return next.handle(req);
  }

}

i mój module odpowiedzialny za podpięcie tej klasy:

providers: [
    {provide: HTTP_INTERCEPTORS, useClass: JwtInterceptor, multi: true},
    {provide: HTTP_INTERCEPTORS, useClass: ErrorInterceptor, multi: true},
    CookieService
  ],

Problem jest taki, że po wysłaniu zapytania nie ma w nagłówku w ogóle cookies.

Przyznam, że nie wiem gdzie robię błąd. Z góry dziękuje za wskazówkę.

komentarz zamknięcia: Znalazłem swój błąd. Problemem było źle ustawiony nagłówek.
komentarz 4 stycznia 2021 przez ScriptyChris Mędrzec (190,190 p.)

Co znajduje się w zmiennej req po sklonowaniu (linia 17) - czy tam jest ciastko? Czy w wysłanym zapytaniu jest nagłówek Authorization? Czy w konsoli są błędy?

komentarz 4 stycznia 2021 przez michal_php Stary wyjadacz (13,700 p.)

W lini 17 jest Ciastko i Authorization(dla JWT api).

 

 

komentarz 4 stycznia 2021 przez michal_php Stary wyjadacz (13,700 p.)

Odpaliłem na szybko jeszcze firefoxa i wywalił mi taki błąd :

Próba ustawienia zabronionego nagłówka „Cookie” została zablokowana.

Trochę tego nie kumam gdyż teraz patrzę po różnych apkach to wszystkie maja nagłówek Cookies. Więc nie wiem czemu zabroniony ?

komentarz 4 stycznia 2021 przez ScriptyChris Mędrzec (190,190 p.)

Chrome nie rzuca podobnego błędu?

 
komentarz 4 stycznia 2021 przez michal_php Stary wyjadacz (13,700 p.)

Dopiero jak od nowa odpaliłem chrome to też coś takiego wywaliło :

Refused to set unsafe header "Cookie"

 

komentarz 4 stycznia 2021 przez ScriptyChris Mędrzec (190,190 p.)

Czy to zapytanie nie jest CORS'owe? Poza tym, Angular zdaje się domyślnie nie przesyłać ciastek, co można wymusić propertisem withCredentials (metoda clone, której używasz przyjmuje ten parametr w obiekcie).

komentarz 4 stycznia 2021 przez michal_php Stary wyjadacz (13,700 p.)

I czy to zapytanie nie jest CORS'owe? 

Zgadza się.

  Angular zdaje się domyślnie nie przesyłać ciastek, co można wymusić

Czy to ze względu na bezpieczeństwo ? 

ustawiłem tą wartość:

 if (currentUser && currentUser.token) {

      req = req.clone({
        withCredentials: true,
        setHeaders: {
          Authorization: `Bearer ${currentUser.token}`,
          Cookie: `auth=${cookies};`,
        }
      });
    }

    return next.handle(req);

ale dalej mi wywala ten błąd i nie chce podpiąć cookie.

komentarz 4 stycznia 2021 przez ScriptyChris Mędrzec (190,190 p.)

Zgadza się.

Sądząc po dodatkowym nagłówku Authorizationnie jest to tzw. zapytanie proste, które wysyłane jest z preflight'em, więc przeglądarka może nie chcieć wysłać ciastek, jeśli serwer nie zwróci nagłówka Access-Control-Allow-Credentials - sprawdź czy taki jest ustawiany.

Czy to ze względu na bezpieczeństwo ? 

Nie jestem pewien (trzeba by poszukać w kodzie źródłowym), ale jeśli Angular swój serwis do HTTP opiera o natywne XHR lub Fetch, to w tych API opcje withCredentials/credentials są domyślnie włączone dla zapytań same-origin.

komentarz 5 stycznia 2021 przez Wiciorny Ekspert (270,910 p.)

nagłówki w sytuacji Creditionali nie mogą być symbolem wieloznacznym w kwestii  Access-Control-Allow-OriginAccess-Control-Allow-Headers 

komentarz 5 stycznia 2021 przez ScriptyChris Mędrzec (190,190 p.)

Znalazłem swój błąd. Problemem było źle ustawiony nagłówek.

@michal_php, z ciekawości: który nagłówek był źle ustawiony?

1
komentarz 6 stycznia 2021 przez michal_php Stary wyjadacz (13,700 p.)
Problem dokładnie leżał na back-enddzie. Brakowało dodanie Cookies do allow_headers Nie wiem czemu na postmanie działo bez tego a na angularze nie.
komentarz 6 stycznia 2021 przez Wiciorny Ekspert (270,910 p.)

no to jest tpo co pisałem ze problem bedzie po stronie konfiguracji bo parametr Authorization 

withCredentials: true

juz z automatu powinien dodawac cookie 

1
komentarz 6 stycznia 2021 przez michal_php Stary wyjadacz (13,700 p.)
Zgadza się problem był na bac-endzie. Tylko dziwne, że postman bez problemu wysyłał a cookie a angular już nie.
komentarz 6 stycznia 2021 przez ScriptyChris Mędrzec (190,190 p.)

Możliwe że dlatego, że Postman nie ma mechanizmu Same-Origin-Policy (albo jest domyślnie wyłączony) w przeciwieństwie do przeglądarki. Dlatego Postmanowi nie przeszkadza brak nagłówków Access-Control-* z serwera.

komentarz 6 stycznia 2021 przez michal_php Stary wyjadacz (13,700 p.)
W sumie racja to miało by sens.

Chciałbym wam podziękować za pomoc i poświęcony czas w rozwiązaniu tego problemu.

1 odpowiedź

0 głosów
odpowiedź 4 stycznia 2021 przez Wiciorny Ekspert (270,910 p.)

Pytanie takie czy w lini nie przypadkiem, nie powinno usunąc się średnika ? 

    Cookie: `2fa_auth=${cookies};`,

 

komentarz 5 stycznia 2021 przez Wiciorny Ekspert (270,910 p.)
withCredentials, Set-Cookiew odpowiedzi zostanie ustawiona przez klienta, ale klient nadal nie wyśle Cookie w żądaniu (które zostało ustawione przy poprzednim żądaniu)
https://angular.io/guide/deprecations#http

withCredentials: true. -> to Ci praktycznie nie działa, lub konfiguracja Credentionali jest błędna bo wystarczy to dodać  :) żeby uzyskać cookie.
Nie wiem jak wygląda konfiguracja Interceptora. Błąd wynika z konfiguracji creditionali w takim razie, skoro przy użyciu  opcji true nie ma cookie domyślnie.
komentarz 5 stycznia 2021 przez michal_php Stary wyjadacz (13,700 p.)

withCredentials, Set-Cookiew odpowiedzi zostanie ustawiona przez klienta, ale klient nadal nie wyśle Cookie w żądaniu (które zostało ustawione przy poprzednim żądaniu)

Nie bardzo rozumiem co masz na myśli mówiąc w poprzednim  żądaniu ? 

withCredentials: true. -> to Ci praktycznie nie działa, lub konfiguracja Credentionali jest błędna bo wystarczy to dodać  :)

Ale co wystarczy dodać ? 

komentarz 5 stycznia 2021 przez Wiciorny Ekspert (270,910 p.)
  withCredentials: true

jeśli napisałbyś poprawną konfiguracje, automatycznie cookies były by dodawane.  jeśli zastosoujesz Credentials na true. 

1
komentarz 5 stycznia 2021 przez michal_php Stary wyjadacz (13,700 p.)

withCredentials: true

 Przecież mam w kodzie już  withCredentials: true :

req = req.clone({
        withCredentials: true,
        setHeaders: {
          Authorization: `Bearer ${currentUser.token}`,
        }
      });
    }

Czy to jest w takim razie nie poprawne ?

jeśli zastosoujesz Credentials na true

Rozumiem, że Ci chodzi o  withCredentials wink

jeśli napisałbyś poprawną konfiguracje

Co jest nie poprawnego w mojej konfiguracji bo nie kumam  

komentarz 6 stycznia 2021 przez Wiciorny Ekspert (270,910 p.)

mówiłem, że niepoprawnie ustawiłeś konfiguracje dla zapisywania dla listy uwierzytelnienia [withCredentials ] przez co  nie bylo cookie 

Podobne pytania

0 głosów
1 odpowiedź 153 wizyt
pytanie zadane 15 listopada 2022 w JavaScript przez ferdynand Obywatel (1,250 p.)
0 głosów
1 odpowiedź 162 wizyt
pytanie zadane 3 września 2020 w JavaScript przez poldeeek Mądrala (5,980 p.)

92,631 zapytań

141,498 odpowiedzi

319,869 komentarzy

62,011 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...