Budowa JWT: nagłówek, ładunek i podpis
Odczytać części zakodowane w base64url i zrozumieć każde pole JWT
Budowa JWT: nagłówek, ładunek i podpis to bezpłatna lekcja Cryptology Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cryptology Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cryptology Academy zawiera 4 lekcji w sumie.
Czym jest JWT?
JSON Web Token (JWT) to kompaktowy, bezpieczny dla adresów URL format tokenu zdefiniowany w RFC 7519. Koduje claims (twierdzenia dotyczące podmiotu) i podpis kryptograficzny w pojedynczym ciągu znaków, umożliwiając bezstanowe uwierzytelnianie.
Struktura trzyczęściowa
JWT ma postać: base64url(header).base64url(payload).base64url(signature). Kropka oddziela poszczególne części. Nagłówek i payload są czytelne (base64url, a nie zaszyfrowane). Tylko podpis ma charakter kryptograficzny.
Nagłówek
Nagłówek jest obiektem JSON: {"alg":"HS256","typ":"JWT"}. alg określa algorytm podpisywania (HS256, RS256, ES256, none). typ zawsze ma wartość "JWT". Dodatkowe nagłówki obejmują kid (identyfikator klucza) używany do wyboru klucza.
Payload / claims
Standardowe zarejestrowane claims: iss (wystawca), sub (podmiot), aud (odbiorcy), exp (znacznik czasu wygaśnięcia w systemie Unix), nbf (ważny od), iat (wystawiony o), jti (identyfikator JWT używany do unieważniania). Claims niestandardowe to dowolne dodatkowe pary klucz-wartość.
Dekodowanie JWT
import base64, json token = "eyJ..." parts = token.split(".") header = json.loads(base64.urlsafe_b64decode(parts[0]+"==")) payload = json.loads(base64.urlsafe_b64decode(parts[1]+"==")) print(header, payload)
Weryfikacja podpisu
Dla HS256: HMAC-SHA256(base64url(header)+"."+base64url(payload), secret). Odbiorca oblicza tę wartość ponownie i porównuje ją z częścią zawierającą podpis. Jeśli wartości są zgodne, a token nie wygasł, token jest prawidłowy.
Podpisy asymetryczne
Dla RS256 klucz prywatny podpisuje ciąg header.payload za pomocą RSA-SHA256. Każda strona posiadająca klucz publiczny może przeprowadzić weryfikację bez klucza prywatnego. Klucze publiczne są rozpowszechniane za pośrednictwem punktów końcowych JWKS (JSON Web Key Set), np. /.well-known/jwks.json.
Kodowanie Base64url
Base64url zastępuje znak + znakiem - oraz / znakiem _, a także pomija dopełnienie =. Dzięki temu JWT są bezpieczne w adresach URL, nagłówkach HTTP i ciasteczkach bez kodowania procentowego. Surowe bajty nadal nie są szyfrowane — są tylko zakodowane.
JWT nie są domyślnie szyfrowane
Payload JWT jest widoczny dla każdego, kto zdekoduje go za pomocą base64url. Nie należy umieszczać sekretów (haseł, numerów SSN) w payloadzie JWT, chyba że używany jest JWE (JSON Web Encryption) z algorytmem "enc" zapewniającym rzeczywiste szyfrowanie.
Czas życia tokenu
Wartość exp należy ustawić na krótki czas (15–60 minut w przypadku tokenów dostępu). Długotrwałe JWT zwiększają ryzyko — jeśli zostaną skradzione, pozostają ważne aż do wygaśnięcia. Należy używać bezpiecznie przechowywanych tokenów odświeżających do wydawania nowych tokenów dostępu o krótkim czasie życia.
Odkrywanie JWKS
Dostawcy uwierzytelniania (Auth0, Keycloak, Google) publikują adres URL JWKS. Weryfikator pobiera klucze publiczne według kid, buforuje je i weryfikuje podpisy bez kontaktowania się z wystawcą przy każdym żądaniu. Rotacja kluczy aktualizuje punkt końcowy JWKS.
Szybkie sprawdzenie
Która część JWT zawiera podpis kryptograficzny?
Podsumowanie
JWT składa się z trzech zakodowanych w base64url części JSON: nagłówka (algorytm), payloadu (claims) i podpisu. Payload jest czytelny — nie jest szyfrowany. Następnie: wybór między HS256 i RS256.
Ucz się Cryptology Academy dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 67
- Lekcje
- 261
Często zadawane pytania
Czy lekcja „Budowa JWT: nagłówek, ładunek i podpis” jest bezpłatna?
Tak — pełny tekst „Budowa JWT: nagłówek, ładunek i podpis” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cryptology Academy, przejdź na CoddyKit PRO. Kurs Cryptology Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Budowa JWT: nagłówek, ładunek i podpis”?
Odczytać części zakodowane w base64url i zrozumieć każde pole JWT Ćwiczysz Cryptology Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Cryptology Academy?
Nie wymagamy żadnego doświadczenia. Cryptology Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Budowa JWT: nagłówek, ładunek i podpis”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Cryptology Academy?
Tak. Każda lekcja Cryptology Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Budowa JWT: nagłówek, ładunek i podpis
- HS256 a RS256: symetryczne i asymetryczne JWT
- Luki w JWT: alg=none i pomylenie kluczy
- Najlepsze praktyki bezpiecznej implementacji JWT