Czym jest JWT? Struktura, claimy i dekodowanie

Czym jest JWT

Czym jest JWT? Struktura, claimy i prywatny dekoder | We.Inc

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.

Najczęściej zadawane pytania

Czy dekodowanie JWT online jest bezpieczne?

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.

Czy JWT jest zaszyfrowany?

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.

W jakim formacie są exp i iat?

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.

Przechowywać JWT w localStorage czy w cookie?

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.

Czy mogę wylogować użytkownika przy użyciu JWT?

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.

Trzy części

Algorytmy podpisu

Pułapki, które wciąż powodują wycieki

Dekodowanie i weryfikacja w kodzie

Dekodowanie payloadu w czystym JavaScript

Odczytuje claimy bez ich weryfikacji. Nadaje się do pokazania nazwy użytkownika w UI, ale nigdy do decydowania o dostępie.

Weryfikacja na serwerze z jose

jwtVerify sprawdza podpis, exp i nbf, a z tymi opcjami także wystawcę, odbiorcę i dozwolony algorytm.

Prywatny dekoder JWT

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

Powiązane: Poradniki

Produkt

Dla kogo

Funkcje

Zasoby

Firma

Mapa strony