Czym jest para kluczy JWT
JWT to token uwierzytelniający, który Twój serwer wydaje zalogowanym użytkownikom. Klient odsyła go przy każdym kolejnym requeście, a każda usługa mająca pasujący klucz publiczny może zweryfikować że podpis jest prawdziwy, a payload nie został podmieniony po drodze.
Żeby to wszystko działało, potrzebujesz pary kluczy: klucza prywatnego, który siedzi na serwerze podpisującym, i klucza publicznego, który udostępniasz (zwykle jako dokument JWK publikowany pod `/.well-known/jwks.json`), żeby weryfikatorzy mogli sprawdzić podpis nigdy nie widząc sekretu.
To narzędzie generuje tę parę dla każdego nowoczesnego algorytmu: RS256/RS384/RS512 (klasyczny RSA), PS256 (RSA-PSS, bezpieczniejszy wariant RSA), ES256/ES384/ES512 (krzywe eliptyczne) lub EdDSA (Ed25519, najmniejszy i najszybszy). Dostajesz klucze w formatach PEM i JWK plus przykładowy podpisany JWT, który możesz od razu sprawdzić w dekoderze JWT i zobaczyć pełną pętlę. Wszystko po stronie serwera wbudowanym modułem `crypto` Node'a, niczego nie przechowujemy.
Jak używać
- Wybierz algorytm. RS256 to domyślny wybór w większości konfiguracji (Auth0, Okta, Keycloak i AWS Cognito stawiają na niego). ES256 daje znacznie mniejsze tokeny. EdDSA to nowoczesny faworyt: najmniejsze klucze, najszybsze podpisywanie, najprostsza implementacja.
- Dla rodziny RSA (RS256, RS384, RS512, PS256): wybierz długość klucza. 2048 bitów to rozsądny standard. 3072 i 4096 robią się wykładniczo wolniejsze przy pomijalnym zysku w realnym bezpieczeństwie.
- Dla rodziny EC (ES256, ES384, ES512): krzywa jest dobierana automatycznie (P-256, P-384, P-521). To jedyne krzywe które RFC 7518 dopuszcza dla każdego z tych algorytmów.
- Dla EdDSA: zawsze używamy Ed25519, krzywej ustandaryzowanej przez RFC 8037 dla JWS. Tu nie ma czego dostrajać.
- Kliknij Generuj. Dostaniesz: klucz prywatny w PEM, klucz publiczny w PEM, klucz prywatny jako JWK, klucz publiczny jako JWK plus przykładowy podpisany JWT z drobnym payloadem (`sub: user-123`, ważny 1 godzinę) żebyś od razu mógł sprawdzić end-to-end że klucze działają.
- Zapisz klucz prywatny od razu. Nigdzie go nie trzymamy. Zamknięcie karty = klucz znika na zawsze. Zainstaluj go na serwerze auth, w API gateway, albo gdziekolwiek wystawiasz tokeny.
- Opublikuj klucz publiczny jako dokument JWKS pod `https://twoja-domena.pl/.well-known/jwks.json`. Większość bibliotek (jose, jsonwebtoken, PyJWT, Microsoft.IdentityModel) potrafi sama pobierać i cache'ować ten URL.
- Kliknij Otwórz w dekoderze obok przykładowego JWT, żeby zobaczyć nagłówek, payload i podpis sparsowane na żywo w dekoderze JWT. Sprawdź czy kid w nagłówku zgadza się z opublikowanym JWK.
Kiedy się przydaje
Sześć typowych sytuacji w których świeża para kluczy JWT zarabia na siebie:
- Pierwsze ustawienie usługi auth (Keycloak, Ory Hydra, self-hosted Auth0, własny serwer OAuth, wewnętrzny API gateway). Bez pary kluczy nie wystawisz ani jednego tokenu.
- Migracja z HS256 na RS256/ES256/EdDSA. HS256 używa wspólnego sekretu, co zmusza każdego weryfikatora do trzymania mocy podpisującej. Algorytmy asymetryczne pozwalają trzymać klucz prywatny tylko na serwerze auth i swobodnie udostępniać publiczny. To standardowa ścieżka upgrade'u dla każdego systemu który urósł poza jedną usługę.
- Rotacja kluczy co 3 do 12 miesięcy w ramach higieny bezpieczeństwa. Generujesz nowy klucz pod nowym kid, publikujesz oba w JWKS, przełączasz podpisującego, wycofujesz stary po okresie karencji.
- Podejrzenie kompromitacji klucza. Włamanie na serwer, przypadkowy commit PEM do publicznego repo, były pracownik miał dostęp. Generujesz nową parę, rotujesz, unieważniasz stary kid w JWKS, force-logout aktywnych sesji.
- Architektury wieloemitentowe. Każda usługa wystawia własne tokeny, każda ma własną parę kluczy żeby promień rażenia kompromitacji był niezależny.
- Testy i demka. Potrzebujesz działającego JWT do testu biblioteki weryfikującej? Wygeneruj parę, podpisz sample i masz real end-to-end przykład w jednym kliknięciu.
Powiązane: Dekoder JWT (dekoduj i sprawdź dowolny JWT), Generator kluczy DKIM, bcrypt verify, Hash hasła, Generator UUID.