W większości nowoczesnych aplikacji jednostronicowych rzeczywiście musimy przechowywać token gdzieś po stronie klienta (najczęstszy przypadek użycia - aby użytkownik był zalogowany po odświeżeniu strony).
Dostępne są łącznie 2 opcje: przechowywanie w sieci Web (przechowywanie sesji, pamięć lokalna) i plik cookie po stronie klienta. Obie opcje są szeroko stosowane, ale nie oznacza to, że są bardzo bezpieczne.
Tom Abbott dobrze podsumowuje sesję JWT sessionStorage i localStorage security :
Magazyn sieciowy (localStorage / sessionStorage) jest dostępny za pośrednictwem JavaScript w tej samej domenie. Oznacza to, że każdy skrypt JavaScript działający w Twojej witrynie będzie miał dostęp do pamięci sieciowej iz tego powodu może być podatny na ataki typu cross-site scripting (XSS) . Krótko mówiąc, XSS to rodzaj luki, w której osoba atakująca może wstrzyknąć JavaScript, który będzie działał na Twojej stronie. Podstawowe ataki XSS próbują wstrzyknąć JavaScript za pomocą danych wejściowych formularza, w których osoba atakująca umieszcza <script>alert('You are Hacked');</script>
formularz, aby sprawdzić, czy jest uruchamiany przez przeglądarkę i czy może być przeglądany przez innych użytkowników.
Aby zapobiec XSS, typową odpowiedzią jest ucieczka i zakodowanie wszystkich niezaufanych danych. React (głównie) robi to za Ciebie! Oto świetna dyskusja na temat tego, za jaką ochronę przed lukami XSS odpowiada React .
Ale to nie obejmuje wszystkich możliwych luk! Innym potencjalnym zagrożeniem jest użycie JavaScript hostowanego w sieciach CDN lub poza infrastrukturą .
Oto znowu Tom:
Nowoczesne aplikacje internetowe obejmują zewnętrzne biblioteki JavaScript do testowania A / B, analizy ścieżek / rynku i reklam. Używamy menedżerów pakietów, takich jak Bower, do importowania kodu innych osób do naszych aplikacji.
Co się stanie, jeśli tylko jeden z używanych przez Ciebie skryptów zostanie przejęty? Na stronie może zostać osadzony złośliwy kod JavaScript, co spowoduje zagrożenie dla magazynu internetowego. Tego typu ataki XSS mogą uzyskać dostęp do Web Storage każdego, kto odwiedza Twoją witrynę, bez ich wiedzy. Prawdopodobnie dlatego wiele organizacji zaleca, aby nie przechowywać niczego wartościowego ani nie ufać żadnym informacjom w pamięci sieciowej. Obejmuje to identyfikatory sesji i tokeny.
Dlatego dochodzę do wniosku, że Web Storage jako mechanizm przechowywania nie wymusza żadnych bezpiecznych standardów podczas przesyłania . Ktokolwiek czyta Web Storage i korzysta z niego, musi dołożyć wszelkich starań, aby zawsze wysyłać token JWT przez HTTPS, a nigdy przez HTTP.