Do czego służy
JSON Web Token (JWT, RFC 7519) to zwarty, bezpieczny dla URL ciąg z trzech części oddzielonych kropkami: nagłówka z algorytmem podpisu, ładunku z oświadczeniami (claims) i podpisu dwóch pierwszych części. API używają JWT jako tokenów bearer, a dostawcy tożsamości jako tokenów ID.
Narzędzie tworzy i podpisuje token z ładunku JSON. Obsługuje:
- HS256, HS384, HS512: HMAC ze wspólnym sekretem, jako tekst lub Base64.
- RS256, RS384, RS512 i PS256, PS384, PS512: podpisy RSA kluczem prywatnym PEM.
- ES256, ES384, ES512: podpisy ECDSA kluczem prywatnym EC.
Jak używać
- Zapisz ładunek jako obiekt JSON albo kliknij Przykład.
- Wybierz Algorytm i wpisz sekret lub wklej klucz prywatny PEM na górze pola wejściowego.
- Opcjonalnie ustaw iat na teraz, dodaj wygaśnięcie (exp) lub dodatkowe pola nagłówka, na przykład identyfikator klucza.
- Skopiuj token z wyniku. Wklej go do dekodera JWT, aby go obejrzeć.
Przykład
Z sekretem your-256-bit-secret poniższy ładunek podpisany HS256 daje znany przykładowy token z jwt.io:
{"sub":"1234567890","name":"John Doe","iat":1516239022}
Nagłówek jest zawsze zapisywany jako {"alg":"HS256","typ":"JWT"}, a po nim dodane pola; alg zawsze odpowiada wybranemu algorytmowi.
Dobre praktyki
Utrzymuj krótki czas życia tokenów dzięki exp i ustawiaj iss oraz aud, aby token jednej usługi nie mógł być użyty w innej. Na serwerze zawsze weryfikuj podpis z jawną listą dozwolonych algorytmów i odrzucaj none. Sekrety HMAC powinny być długie i losowe, co najmniej tak długie jak wynik skrótu (32 bajty dla HS256).
FAQ
› Który algorytm wybrać?
Ten, który weryfikuje twój serwer. HS256 używa wspólnego sekretu i jest typowy w obrębie jednego systemu. RS256 i ES256 podpisują kluczem prywatnym, a każdy może zweryfikować kluczem publicznym, co pasuje do tokenów sprawdzanych przez wiele usług. ES256 daje znacznie krótsze podpisy niż RS256.
› Jakie formaty kluczy prywatnych są obsługiwane?
Klucze PEM w formacie PKCS#8 (BEGIN PRIVATE KEY), PKCS#1 RSA (BEGIN RSA PRIVATE KEY) i SEC1 EC (BEGIN EC PRIVATE KEY). Zaszyfrowane klucze trzeba najpierw wyeksportować bez frazy. Dla ES256, ES384 i ES512 klucz musi leżeć odpowiednio na krzywej P-256, P-384 lub P-521.
› Czy ładunek JWT jest tajny?
Nie. Nagłówek i ładunek są tylko zakodowane w Base64URL i każdy, kto ma token, może je odczytać. Podpis chroni przed zmianami, a nie przed odczytem. Nigdy nie umieszczaj haseł ani innych sekretów w ładunku JWT.
› Czy mój sekret lub klucz prywatny jest zapisywany albo wysyłany?
Nie. Podpisywanie odbywa się w przeglądarce przez Web Crypto API. Sekret lub klucz istnieją tylko w pamięci tej strony: nie są zapisywane, nie trafiają do paska adresu ani do linków udostępniania. Mimo to nie wklejaj kluczy produkcyjnych na stronach, których nie kontrolujesz.