Jak używać
- Wybierz HS256, HS384 lub HS512.
- Edytuj zawartość ładunku i kliknij „Ustaw iat i exp”, aby dodać bieżący czas i czas wygaśnięcia.
- Wpisz sekret testowy lub wygeneruj losowy sekret 256-bitowy.
- Skopiuj podpisany token. Aby sprawdzić token, przełącz się na „Weryfikacja podpisu”, wklej go i wpisz sekret.
Jak to działa
JSON Web Token (RFC 7519) składa się z trzech części kodowanych w Base64URL: nagłówka, ładunku z oświadczeniami i podpisu. W przypadku algorytmów HMAC HS256, HS384 i HS512 podpis to HMAC z SHA-256, SHA-384 lub SHA-512 obliczony na ciągu „header.payload”, z kluczem będącym wspólnym sekretem. Każdy, kto zna sekret, może tworzyć i weryfikować tokeny.
Narzędzie serializuje nagłówek i ładunek jako kompaktowy JSON, koduje je i podpisuje za pomocą crypto.subtle, czyli interfejsu Web Crypto API wbudowanego w przeglądarkę. Pole alg w nagłówku zawsze odpowiada wybranemu algorytmowi, pole typ domyślnie ma wartość JWT, a pozostałe pola nagłówka, takie jak kid, są zachowywane. Polecenie „Ustaw iat i exp” zapisuje bieżący czas jako iat (czas wystawienia) i dodaje wybrany czas życia jako exp; obie wartości są wyrażone w sekundach od 1 stycznia 1970 r. UTC. Wynik jest zgodny z innymi bibliotekami JWT; na przykład klasyczny przykładowy token z jwt.io jest odtwarzany dokładnie.
Sekret może być zwykłym tekstem (jego bajty UTF-8 są kluczem) lub bajtami zakodowanymi w Base64/Base64URL, co jest używane w wielu frameworkach. Przycisk losowego sekretu tworzy 32 losowe bajty za pomocą crypto.getRandomValues. W przypadku HS256 używaj co najmniej 32 losowych bajtów; krótkie sekrety wybrane przez człowieka można odgadnąć offline na podstawie dowolnego tokenu.
Weryfikacja dekoduje token, sprawdza, czy używa algorytmu HMAC, i ponownie oblicza podpis za pomocą crypto.subtle.verify. Pokazuje też, kiedy wartości exp lub nbf oznaczają, że token wygasł albo nie jest jeszcze ważny. Algorytmy z kluczem publicznym, takie jak RS256, ES256 i inne, nie są obsługiwane, a weryfikacja tutaj nie sprawdza wystawcy, odbiorców ani innych oświadczeń, których może wymagać Twoja aplikacja.
Przykłady
Testowanie API lokalnie
Twój serwer developerski oczekuje tokenów HS256 podpisanych sekretem „dev-secret-change-me”. Ustaw sub na identyfikator użytkownika testowego, kliknij „Ustaw iat i exp” z czasem 1 godzina, wpisz sekret i wyślij token w nagłówku Authorization: Bearer.
Sprawdzanie, którym sekretem podpisano token
Token stagingowy jest odrzucany. Wklej go w sekcji „Weryfikacja podpisu” i wypróbuj sekret stagingowy: komunikat „Podpis nieprawidłowy” oznacza, że token został podpisany innym sekretem albo sekret ma inny format (tekst zamiast Base64).
Odtwarzanie przykładu z jwt.io
Przy nagłówku {"alg":"HS256","typ":"JWT"}, ładunku {"sub":"1234567890","name":"John Doe","iat":1516239022} i sekrecie „your-256-bit-secret” token kończy się na SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c, tak samo jak na jwt.io.
Często zadawane pytania
Czy mój sekret jest wysyłany na Wasz serwer?
Nie. Podpisywanie i weryfikacja odbywają się za pomocą Web Crypto API w przeglądarce, a sekret nie jest nigdzie przechowywany ani wysyłany. Zalecamy jednak korzystanie wyłącznie z sekretów testowych, ponieważ prawdziwego sekretu do podpisywania nie należy nigdy wpisywać na stronie internetowej.
Dlaczego podpis jest nieprawidłowy, mimo że sekret jest poprawny?
Sprawdź format sekretu. Niektóre systemy używają tekstu sekretu, inne najpierw dekodują go z Base64, co daje inne bajty klucza. Sprawdź też, czy token nie został zmieniony i czy używa tego samego algorytmu.
Czy mogę utworzyć tokeny RS256 lub ES256?
Nie w tym narzędziu. Obsługuje ono tylko algorytmy HMAC ze wspólnym sekretem: HS256, HS384 i HS512.
Czy ładunek jest szyfrowany?
Nie. Podpisany JWT jest tylko zakodowany; każdy może go odkodować i odczytać ładunek. Podpis jedynie potwierdza, że nie został zmieniony. Nie umieszczaj w ładunku haseł ani innych poufnych danych.
Prywatność
Tokeny są tworzone i weryfikowane wyłącznie w przeglądarce za pomocą Web Crypto API. Nagłówek, ładunek, token i sekret nie są przesyłane, przechowywane ani uwzględniane w statystykach.