JSON Web Token w praktyce: header, payload i podpis, siedem zarejestrowanych claimów z RFC 7519, pułapki bezpieczeństwa oraz dekoder, który nigdy nigdzie nie wysyła Twojego tokenu.
JWT (JSON Web Token) to zwarty, bezpieczny dla adresów URL ciąg trzech części base64url oddzielonych kropkami: headera z nazwą algorytmu, payloadu z claimami, takimi jak sub i exp, oraz podpisu. Każdy może zdekodować i odczytać payload, ale tylko podpis sprawdzony właściwym kluczem dowodzi, że nikt go nie zmienił.
Zarejestrowane nazwy claimów (RFC 7519, sekcja 4.1)
Wklej token do dekodera poniżej, aby zobaczyć jego header i payload, z wyjaśnieniem każdego zarejestrowanego claimu i każdym znacznikiem czasu zamienionym na czytelną datę. Dekodowanie odbywa się we własnym JavaScript tej strony, więc token nigdy nie jest wysyłany. To ważne, bo aktywny token to klucz do czyjegoś konta.
Tylko jeśli dekodowanie odbywa się w Twojej przeglądarce. Token to dane uwierzytelniające: każdy, kto ma ważny token, może wywoływać API jako ten użytkownik aż do wygaśnięcia. Dekoder na tej stronie działa lokalnie i niczego nie wysyła, ale w przypadku tokenów produkcyjnych najbezpieczniejszym nawykiem jest dekodowanie wyłącznie tokenów testowych.
Zwykły podpisany JWT (JWS) nie jest. Jego payload jest tylko zakodowany w base64url, co każdy może odwrócić. Zaszyfrowane tokeny istnieją jako JWE, z pięcioma częściami oddzielonymi kropkami zamiast trzech, ale większość tokenów logowania i API jest podpisana, a nie zaszyfrowana.
NumericDate: pełne sekundy od 1970-01-01T00:00:00Z, bez sekund przestępnych. Date.now() w JavaScript zwraca milisekundy, więc przed porównaniem podziel przez 1000, bo to bardzo częsty błąd.
Każdy skrypt działający na stronie może odczytać localStorage, więc jeden błąd cross-site scripting może wykraść token. Cookie z flagami HttpOnly, Secure i SameSite trzyma go z dala od skryptów, kosztem konieczności obsługi CSRF. Wiele zespołów wybiera cookie dla sesji przeglądarkowych.
Nie samym tokenem, bo pozostaje ważny aż do exp. Stosuj krótki czas wygaśnięcia i tokeny odświeżające, które możesz unieważnić, albo prowadź listę zablokowanych wartości jti dla tokenów, które muszą wygasnąć wcześniej.
Odczytuje claimy bez ich weryfikacji. Nadaje się do pokazania nazwy użytkownika w UI, ale nigdy do decydowania o dostępie.
jwtVerify sprawdza podpis, exp i nbf, a z tymi opcjami także wystawcę, odbiorcę i dozwolony algorytm.
Wklej token, aby odczytać jego header i payload. Dekodowanie działa w Twojej przeglądarce: token nie jest wysyłany, przechowywany ani logowany.
Kto wystawił token
Kogo dotyczy token, zwykle identyfikator użytkownika
Którzy odbiorcy powinni go akceptować
Odrzuć w tym momencie lub później
Odrzuć przed tym momentem
Kiedy token został utworzony
Unikalny identyfikator, przydatny do blokowania ponownego użycia
JWT
Załaduj przykładowy token
Wyczyść
Header
Payload
Podpis (tutaj niezweryfikowany)
Wyjaśnienie claimów
Claim
Wartość
Znaczenie
Własny claim
Podpisany JWT ma 3 części oddzielone kropkami, a ten ma {n}.
5 części oznacza zaszyfrowany JWE, którego nie da się odczytać bez klucza.
Część {n} nie jest poprawnym JSON w base64url.
Wygasł {v}
Ważny do {v}
Nieważny przed {v}
alg ma wartość none: ten token nie ma podpisu i musi zostać odrzucony.
Zdekodowano lokalnie. Nic nie opuszcza tej strony.
Zacznij za darmo · Bez karty kredytowej