Cryptology Academy · Lekcja

Budowa JWT: nagłówek, ładunek i podpis

Odczytać części zakodowane w base64url i zrozumieć każde pole JWT

Lekcja 1 z 413 kroki

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.

Bezpłatny start

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

  1. Budowa JWT: nagłówek, ładunek i podpis
  2. HS256 a RS256: symetryczne i asymetryczne JWT
  3. Luki w JWT: alg=none i pomylenie kluczy
  4. Najlepsze praktyki bezpiecznej implementacji JWT
← Powrót do Cryptology Academy