Czytałem kilka postów na temat „JWT vs Cookie”, ale tylko mnie wprawiły w zakłopotanie ...
Chcę wyjaśnienia , kiedy ludzie mówią o „uwierzytelnianiu opartym na tokenach a pliki cookie”, pliki cookie odnoszą się tutaj jedynie do plików cookie sesji ? Rozumiem, że plik cookie jest jak medium , może być używany do implementacji uwierzytelniania opartego na tokenach (przechowywać coś, co może identyfikować zalogowanego użytkownika po stronie klienta ) lub uwierzytelniania opartego na sesji (przechowywać stałą po stronie klienta pasujące do informacji o sesji po stronie serwera )
Dlaczego potrzebujemy tokena internetowego JSON ? Używałem standardowego pliku cookie do zaimplementowania uwierzytelniania opartego na tokenach ( nie używam identyfikatora sesji, nie używam pamięci serwera ani przechowywania plików )
Set-Cookie: user=innocent; preferred-color=azure
:, a jedyną różnicą, jaką zauważyłem, jest to, że JWT zawiera zarówno ładunek, jak i podpis ... podczas gdy możesz wybrać między plikiem cookie ze podpisem a zwykłym tekstem dla nagłówka http. Moim zdaniem podpisany plik cookie (cookie:'time=s%3A1464743488946.WvSJxbCspOG3aiGi4zCMMR9yBdvS%2B6Ob2f3OG6%2FYCJM'
) jest bardziej wydajny, jedyną wadą jest to, że klient nie może odczytać tokena, tylko serwer może ... ale myślę, że jest w porządku, ponieważ tak jak żądanie w JWT jest opcjonalne, nie jest konieczne, aby token mieć znaczenie
źródło
Przegląd
To, o co prosisz, to różnica między plikami cookie a tokenami okaziciela do wysyłania tokenów sieci Web JSON (JWT) z klienta na serwer.
Zarówno pliki cookie, jak i tokeny okaziciela wysyłają dane.
Jedna różnica polega na tym, że pliki cookie służą do wysyłania i przechowywania dowolnych danych, podczas gdy tokeny okaziciela służą do wysyłania danych autoryzacyjnych.
Te dane są często kodowane jako token JWT.
Ciastko
Plik cookie to para nazwa-wartość, która jest przechowywana w przeglądarce internetowej i ma datę ważności i powiązaną domenę.
Przechowujemy pliki cookie w przeglądarce internetowej z JavaScriptem lub z nagłówkiem odpowiedzi HTTP.
Przeglądarka internetowa automatycznie wysyła pliki cookie z każdym żądaniem do domeny pliku cookie.
Token okaziciela
Token okaziciela to wartość umieszczana w
Authorization
nagłówku każdego żądania HTTP. Nie jest nigdzie automatycznie zapisywany, nie ma daty wygaśnięcia ani powiązanej domeny. To tylko wartość. Ręcznie przechowujemy tę wartość w naszych klientach i ręcznie dodajemy tę wartość do nagłówka autoryzacji HTTP.JWT i uwierzytelnianie oparte Reklamowe
Kiedy wykonujemy uwierzytelnianie oparte na tokenach, takie jak OpenID, OAuth lub OpenID Connect, otrzymujemy access_token (a czasem id_token) od zaufanego organu. Zwykle chcemy go przechowywać i wysyłać wraz z żądaniami HTTP dotyczącymi chronionych zasobów. Jak to zrobimy?
Opcja 1 to przechowywanie tokena (ów) w pliku cookie. To obsługuje przechowywanie, a także automatycznie wysyła token (y) do serwera w
Cookie
nagłówku każdego żądania. Następnie serwer analizuje plik cookie, sprawdza token (y) i odpowiednio odpowiada.Inną opcją jest przechowywanie tokenu w pamięci lokalnej / sesji, a następnie ręczne ustawienie
Authorization
nagłówka każdego żądania. W takim przypadku serwer odczytuje nagłówek i postępuje tak, jak w przypadku pliku cookie.Warto przeczytać powiązane RFC, aby dowiedzieć się więcej.
źródło
Oprócz tego, co powiedział MvdD o automatycznym wysyłaniu plików cookie:
Podsumowując: posty, które czytasz, prawdopodobnie porównują JWT jako token okaziciela z plikiem cookie uwierzytelniania dla celów uwierzytelniania przeglądarki i serwera. Ale JWT może zrobić znacznie więcej, wprowadza standaryzację i funkcje do użytku poza przypadkiem użycia, o którym prawdopodobnie myślisz.
źródło
Chociaż pliki cookie mogą zwiększać ryzyko ataków CSRF, ponieważ są wysyłane automatycznie wraz z żądaniami, mogą zmniejszyć ryzyko ataków XSS, gdy
HttpOnly
flaga jest ustawiona, ponieważ żaden skrypt, który jest wstrzykiwany na stronę, nie będzie w stanie odczytać ciastko.CSRF: użytkownik klika łącze (lub wyświetla obrazy) w witrynie atakującego, co powoduje, że przeglądarka wysyła żądanie do witryny ofiary. Jeśli ofiara używa plików cookie, przeglądarka automatycznie umieści plik cookie w żądaniu, a jeśli żądanie GET może spowodować jakiekolwiek działania nie tylko do odczytu, strona ofiary jest narażona na atak.
XSS: osoba atakująca osadza skrypt w witrynie ofiary (witryna ofiary jest podatna na ataki tylko wtedy, gdy dane wejściowe nie są prawidłowo oczyszczone), a skrypt atakującego może zrobić wszystko, na co zezwala javascript na stronie. Jeśli przechowujesz tokeny JWT w pamięci lokalnej, skrypt atakującego może odczytać te tokeny, a także wysłać je do kontrolowanego przez siebie serwera. Jeśli używasz plików cookie z
HttpOnly
flagą, skrypt atakującego nie będzie w stanie odczytać Twojego pliku cookie. To powiedziawszy, skrypt, który pomyślnie wstrzyknął, nadal będzie w stanie zrobić wszystko, co może zrobić javascript, więc nadal masz połączenie z IMO (tj. Podczas gdy mogą nie być w stanie odczytać pliku cookie, aby wysłać go na własny serwer do późniejszego użytku , mogą wysyłać żądania do najbliższej witryny za pomocą XHR, który i tak będzie zawierał plik cookie).źródło
Ref - potrzeba JSON Web Token
Ciasteczka
W przypadku plików cookie, gdy użytkownik zostanie uwierzytelniony, serwer Gmail utworzy unikalny identyfikator sesji. Odpowiadając temu identyfikatorowi sesji, będzie przechowywać w pamięci wszystkie informacje o użytkowniku, które są potrzebne serwerowi Gmaila do rozpoznania użytkownika i umożliwienia mu wykonywania operacji.Również wtedy dla wszystkich kolejnych żądań i odpowiedzi ten identyfikator sesji również zostanie przekazany. Więc teraz, gdy serwer otrzyma żądanie, sprawdzi identyfikator sesji. Użycie tego identyfikatora sesji sprawdzi, czy są jakieś odpowiednie informacje. Pozwoli to użytkownikowi uzyskać dostęp do zasobu i zwrócić odpowiedź wraz z identyfikatorem sesji.
Wady plików cookie
JWT
źródło