Skip to content

Koder i generator JWT

Darmowy generator i koder JWT online. Zbuduj header i payload, podpisz HS256, RS256 lub ES256 natychmiast. W 100% w przeglądarce — sekret i klucz nie opuszczają urządzenia.

Bez śledzenia Działa w przeglądarce Bezpłatne
Payload (claims)
Wstaw zarejestrowany claim:
Sekret
Podpisane lokalnie w przeglądarce — sekret i klucz prywatny nigdy nie opuszczają urządzenia.
Kieruje się zachowaniem podpisywania z RFC 7515/7518, a wynik jest sprawdzany krzyżowo niezależnym weryfikatorem klucza publicznego — Zespół bezpieczeństwa Go Tools · Jun 11, 2026

Czym jest koder JWT?

Koder JWT buduje i kryptograficznie podpisuje JSON Web Token z header i payload zawierającego claims. JWT, zdefiniowany w RFC 7519, to trzy sekcje zakodowane w Base64URL i połączone kropkami: header.payload.signature. Header nazywa algorytm podpisu; payload niesie claims (kogo dotyczy token, co może robić, kiedy wygasa); a signature to kryptograficzny dowód, obliczony na podstawie header i payload kluczem tajnym lub prywatnym, który pozwala odbiorcy wykryć modyfikacje.

„JSON Web Token (JWT) to zwarty format reprezentacji claims przeznaczony dla środowisk z ograniczonym miejscem, takich jak nagłówki HTTP Authorization i parametry zapytań URI.” — RFC 7519, sekcja 1

Kodowanie jest odwrotnością dekodowania. Dekoder JWT odczytuje claims istniejącego tokena; koder bierze claims, które podajesz, i tworzy zupełnie nowy podpisany token. Krok podpisywania jest tym, co odróżnia prawdziwy JWT od dowolnego Base64 — bez poprawnego signature żaden weryfikator nie zaakceptuje tokena. To narzędzie podpisuje natywnym Web Crypto API przeglądarki w rodzinach HMAC (HS), RSA (RS, PS) i ECDSA (ES), więc cała operacja odbywa się na Twoim urządzeniu, z zerem zależności i zerem wywołań sieciowych.

Programiści sięgają po koder JWT bez przerwy: aby wystawić token sprawdzający chroniony endpoint API, aby odtworzyć dokładny kształt claim wystawianych przez serwer OAuth i zdebugować błąd, aby zbudować fixture do testów integracyjnych albo aby przekazać współpracownikowi gotowy do użycia token Bearer do polecenia curl. Ponieważ payload jest zakodowany, ale nieszyfrowany, JWT można bezpiecznie przesyłać przez sieć, ale nigdy nie wolno umieszczać w nim sekretów — każdy, kto ma token, może odczytać każdy claim, a tylko signature powstrzymuje go przed zmianą któregokolwiek z nich.

Praca z JWT naturalnie łączy się z innymi narzędziami programistycznymi. Po podpisaniu zdekoduj token, aby potwierdzić jego claims, zamień exp i iat między czasem Unix a czytelnymi datami lub oblicz skrót SHA-256, gdy potrzebujesz podstawowej funkcji skrótu, na której zbudowane jest HMAC w HS256. Ponieważ każdy segment JWT jest zakodowany w Base64URL, narzędzie Base64 przydaje się przy ręcznym sprawdzaniu tokena; aby dogłębnie poznać to kodowanie, zajrzyj do naszego przewodnika po podstawach Base64.

// Sign a JWT in the browser with the Web Crypto API (HS256)
async function encodeJwt(payload, secret) {
  const b64url = (bytes) =>
    btoa(String.fromCharCode(...new Uint8Array(bytes)))
      .replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
  const enc = (obj) =>
    b64url(new TextEncoder().encode(JSON.stringify(obj)));

  const header = { alg: 'HS256', typ: 'JWT' };
  const signingInput = `${enc(header)}.${enc(payload)}`;

  const key = await crypto.subtle.importKey(
    'raw', new TextEncoder().encode(secret),
    { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);
  const sig = await crypto.subtle.sign(
    'HMAC', key, new TextEncoder().encode(signingInput));

  return `${signingInput}.${b64url(sig)}`;
}

const token = await encodeJwt({ sub: 'user_123', exp: 1999999999 }, 'my-secret');
// → eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyXzEyMyIsImV4cCI6MTk5OTk5OTk5OX0....

Kluczowe funkcje

Natychmiastowe generowanie i podpisywanie JWT

Edytuj payload i obserwuj, jak podpisany token aktualizuje się w czasie rzeczywistym — header, payload i signature obliczane w locie. Bez przycisku „Generuj”, bez rundy do serwera.

Pełne pokrycie algorytmów

Podpisuj algorytmami HS256/384/512, RS256/384/512, PS256/384/512 oraz ES256/384/512 — każdą popularną rodziną JWS, wszystko przez natywne Web Crypto API przeglądarki.

Klucze nigdy nie opuszczają urządzenia

Twój sekret i klucz prywatny PKCS8 są używane w całości w przeglądarce. Nic nie jest wysyłane, logowane ani zapisywane — bezpieczne przy tworzeniu i reakcji na incydent.

Pomocniki szybkiego claim

Wstaw iss, sub, aud, iat, nbf lub jednogodzinny exp jednym kliknięciem — bez ręcznych timestampów Unix, bez potknięć składniowych.

Wynik oznaczony kolorami

Podpisany token jest podzielony na header, payload i signature wyraźnymi kolorami, dzięki czemu struktura jest oczywista na pierwszy rzut oka i łatwa do skopiowania.

Zero zależności

Zbudowane wyłącznie na Web Crypto API przeglądarki i JSON — bez bibliotek zewnętrznych, bez telemetrii, bez jakichkolwiek wywołań sieciowych.

Przykłady

Token sesyjny HS256

{
  "sub": "user_123",
  "name": "Alice",
  "role": "admin",
  "iat": 1715000000,
  "exp": 1999999999
}
secret: a-string-secret-at-least-256-bits-long
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyXzEyMyIsIm5hbWUiOiJBbGljZSIsInJvbGUiOiJhZG1pbiIsImlhdCI6MTcxNTAwMDAwMCwiZXhwIjoxOTk5OTk5OTk5fQ.<HMAC-SHA256 signature>

Token HMAC-SHA256 podpisany współdzielonym sekretem — najczęstszy schemat dla bezstanowego uwierzytelniania sesji. Każdy, kto ma ten sam sekret, może go zweryfikować.

Token dostępu RS256

{
  "iss": "https://auth.example.com",
  "aud": "api.example.com",
  "sub": "90087165",
  "scope": "read:user write:post",
  "iat": 1715000000,
  "exp": 1999999999
}
private key: -----BEGIN PRIVATE KEY----- (PKCS8)
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2F1dGguZXhhbXBsZS5jb20iLCJhdWQiOiJhcGkuZXhhbXBsZS5jb20iLCJzdWIiOiI5MDA4NzE2NSIsInNjb3BlIjoicmVhZDp1c2VyIHdyaXRlOnBvc3QiLCJpYXQiOjE3MTUwMDAwMDAsImV4cCI6MTk5OTk5OTk5OX0.<RSA signature>

Token dostępu w stylu OAuth podpisany kluczem RSA. Token jest podpisywany kluczem prywatnym i weryfikowany przez każdego, kto ma pasujący klucz publiczny — idealny, gdy weryfikujący nie powinien móc wystawiać tokenów.

Zwarty token ES256

{
  "sub": "device-42",
  "iat": 1715000000,
  "exp": 1999999999
}
private key: -----BEGIN PRIVATE KEY----- (P-256)
eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkZXZpY2UtNDIiLCJpYXQiOjE3MTUwMDAwMDAsImV4cCI6MTk5OTk5OTk5OX0.<ECDSA P-256 signature>

Token ECDSA na krzywej P-256. Podpisy ES256 są znacznie krótsze niż RSA przy równoważnym poziomie bezpieczeństwa, co utrzymuje mały rozmiar tokena w środowiskach o ograniczonych zasobach.

Jak używać

  1. 1

    Edytuj claims w payload

    Wpisz claims, których potrzebuje token, jako JSON w edytorze payload. Użyj chipów szybkiego claim, aby wstawić iss, sub, aud, iat, nbf lub jednogodzinny exp bez wpisywania timestampów.

  2. 2

    Wybierz algorytm i wpisz klucz

    Wybierz algorytm podpisu. Dla HS256/384/512 wpisz sekret; dla algorytmów RS, PS lub ES wklej klucz prywatny PKCS8 PEM. Token jest podpisywany lokalnie w trakcie pisania.

  3. 3

    Skopiuj podpisany JWT

    Podpisany token pojawia się natychmiast, oznaczony kolorami segmentów. Kliknij Kopiuj, aby przenieść go do nagłówka Authorization, polecenia curl lub testu. Twój klucz nigdy nie opuścił przeglądarki.

Common Errors

Użycie słabego sekretu HMAC

Bezpieczeństwo HS256 zależy w całości od entropii sekretu. Krótki lub łatwy do odgadnięcia sekret pozwala napastnikom złamać go siłowo i sfałszować tokeny. Użyj co najmniej 256 bitów losowości.

✗ Niepoprawne
secret: "password123"  // guessable, low entropy
✓ Poprawne
secret: base64(crypto.randomBytes(32))  // >=256 random bits

Pominięcie claim exp

Token bez exp nigdy nie wygasa. Jeśli wycieknie, nie ma naturalnego punktu unieważnienia. Zawsze ustawiaj wygaśnięcie odpowiednie do typu tokena.

✗ Niepoprawne
{ "sub": "user_123", "role": "admin" }  // no exp
✓ Poprawne
{ "sub": "user_123", "role": "admin", "exp": 1715003600 }

Wklejenie klucza PKCS1 zamiast PKCS8

Web Crypto API importuje tylko klucze prywatne PKCS8. Tradycyjny klucz RSA PKCS1 nie zaimportuje się — przekonwertuj go najpierw.

✗ Niepoprawne
-----BEGIN RSA PRIVATE KEY-----  // PKCS1, not supported
✓ Poprawne
openssl pkcs8 -topk8 -nocrypt -in pkcs1.pem -out pkcs8.pem

Typowe zastosowania

Generowanie tokenów do testów API
Wygeneruj token Bearer HS256 w kilka sekund, aby sprawdzić chroniony endpoint z curl, Postmana lub testu integracyjnego.
Odtwarzanie tokenów OAuth i OIDC
Zbuduj token RS256 lub ES256 odzwierciedlający to, co wystawia Twój serwer autoryzacji, aby zdebugować niezgodności claim i audience.
Tworzenie fixture testowych
Wytwórz deterministyczne podpisane tokeny do testów jednostkowych i integracyjnych bez stawiania pełnego serwera uwierzytelniania.
Debugowanie błędów autoryzacji
Odtwórz kształt tokena klienta — issuer, audience, scope, wygaśnięcie — aby znaleźć przyczynę, dla której backend go odrzuca.
Walidacja weryfikatora
Podpisuj tokeny znanym kluczem, aby potwierdzić, że Twoja warstwa weryfikacji akceptuje poprawne tokeny i odrzuca zmodyfikowane.
Prototypowanie przepływów uwierzytelniania
Przekaż współpracownikom gotowe do użycia tokeny podczas budowania nowego logowania, mikroserwisu lub wywołania między usługami.

Szczegóły techniczne

Zgodność z RFC 7519 / 7515 / 7518
Tworzy tokeny JWS zgodne z RFC 7519 (JWT), RFC 7515 (JWS) i RFC 7518 (JWA), z zarejestrowanymi identyfikatorami algorytmów w header.
Natywne podpisywanie Web Crypto
Podpisuje przez crypto.subtle dla HMAC, RSASSA-PKCS1-v1_5, RSA-PSS i ECDSA. Podpisy ECDSA są emitowane jako surowe r||s, dokładnie tak, jak wymaga JWS.
Base64URL, zero zależności
Header i payload są kodowane w Base64URL alfabetem bezpiecznym dla URL-i (RFC 4648), bez paddingu. Bez bibliotek zewnętrznych, bez wywołań sieciowych, bez telemetrii.

Dobre praktyki

Zawsze ustawiaj wygaśnięcie
Dodaj claim exp, aby token, który wyciekł, przestał być ważny. Krótkie czasy życia zmniejszają zasięg szkód — minuty dla tokenów dostępu, a nie dni.
Trzymaj sekrety poza payload
Payload JWT jest czytelny dla każdego, kto ma token. Umieszczaj w nim identyfikatory i scope; nigdy haseł, kluczy API ani pełnych danych osobowych.
Podpisuj po stronie serwera na produkcji
Używaj tego narzędzia do testów i debugowania. W prawdziwych systemach podpisuj tokeny na serwerze utrzymywaną biblioteką i kluczem z menedżera sekretów.

Najczęściej zadawane pytania

Jak wygenerować JWT online?
Wystarczy edytować payload JSON w polu powyżej, wybrać algorytm podpisu (HS256 jest domyślny i wymaga tylko sekretu) oraz wpisać sekret lub wkleić klucz prywatny w formacie PKCS8 PEM. Podpisany token pojawia się natychmiast, z segmentami header, payload i signature oznaczonymi kolorami, dzięki czemu całość można skopiować jednym kliknięciem. Podpisywanie działa w całości w przeglądarce za pomocą natywnego Web Crypto API — nie ma przycisku „Generuj”, na który trzeba czekać, ani żądania do serwera, więc tokeny można bezpiecznie podpisywać prawdziwymi kluczami w trakcie tworzenia.
Czym jest generator JWT?
Generator JWT to narzędzie, które buduje i kryptograficznie podpisuje JSON Web Token z header i payload zawierającego claims, tworząc ciąg header.payload.signature, którego można użyć jako tokena Bearer. Jest odwrotnością dekodera JWT: zamiast odczytywać istniejący token, tworzy nowy podpisany sekretem (HS256) lub kluczem prywatnym (RS256/ES256). Ten generator działa w całości w przeglądarce, więc token powstaje natychmiast, a klucz podpisujący nigdy nie opuszcza urządzenia.
Czy ten generator JWT jest darmowy i bezpieczny w użyciu?
Tak — jest całkowicie darmowy, bez rejestracji, bez reklam i bez śledzenia. Jest bezpieczny, ponieważ całe podpisywanie odbywa się lokalnie w przeglądarce przez Web Crypto API: payload, sekret i klucz prywatny nigdy nie są wysyłane, logowane ani zapisywane, a narzędzie w ogóle nie wykonuje żądań sieciowych. Dzięki temu nadaje się nawet do pracy z wrażliwymi kluczami, choć używanie jednorazowych kluczy testowych to zawsze najbezpieczniejszy nawyk.
Czy bezpiecznie jest wpisać tutaj mój sekret lub klucz prywatny?
Tak. Podpisywanie odbywa się lokalnie w przeglądarce; sekret i klucz prywatny nigdy nie są wysyłane na serwer, nie są logowane, zapisywane ani używane do analityki. Nie ma cookies ani śledzenia. Ma to znaczenie, bo klucz podpisujący JWT może wystawiać ważne poświadczenia — wklejenie go do zdalnego narzędzia byłoby równoznaczne z przekazaniem kluczy do całego systemu uwierzytelniania. Ponieważ wszystko działa po stronie klienta, tego kodera można bezpiecznie używać z kluczami produkcyjnymi, ale i tak zawsze lepiej wybrać klucze jednorazowe lub testowe.
Jaka jest różnica między HS256 a RS256?
HS256 (HMAC-SHA256) używa jednego współdzielonego sekretu zarówno do podpisywania, jak i weryfikacji. Jest prosty i szybki, ale każda strona, która może zweryfikować token, może go także utworzyć, więc sekret musi pozostać wyłącznie na zaufanych serwerach. RS256 (RSA-SHA256) używa pary kluczy: podpisujesz kluczem prywatnym, a inni weryfikują kluczem publicznym. Pozwala to swobodnie rozdawać klucz publiczny — aplikacjom klienckim, usługom partnerskim lub endpointowi JWKS — bez dawania komukolwiek możliwości sfałszowania tokenów. Używaj HS256 w systemach symetrycznych, jednowłaścicielskich; używaj RS256 lub ES256, gdy weryfikujący nie powinni móc wystawiać tokenów.
Jakie algorytmy obsługuje ten koder JWT?
Podpisuje algorytmami HS256, HS384, HS512 (HMAC ze współdzielonym sekretem), RS256, RS384, RS512 (RSA PKCS#1 v1.5), PS256, PS384, PS512 (RSA-PSS) oraz ES256, ES384, ES512 (ECDSA na krzywych P-256, P-384 i P-521). Wszystkie są generowane natywnym Web Crypto API przeglądarki, więc nie ma bibliotek zewnętrznych i nic nie opuszcza Twojego komputera. Algorytmy HMAC przyjmują sekret tekstowy lub Base64; rodziny RSA i ECDSA przyjmują klucz prywatny w formacie PKCS8 PEM.
Jak ustawić claim exp (wygaśnięcie)?
Dodaj do payload claim exp jako timestamp Unix w sekundach — na przykład "exp": 1999999999. Najszybszą drogą jest chip exp +1h pod payloadem, który wstawia wygaśnięcie za godzinę od teraz. Tak samo można dodać iat (issued-at) oraz nbf (not-before). Pamiętaj, że exp jest w sekundach, a nie milisekundach, oraz że weryfikujący porównują go z własnym zegarem, więc utrzymuj zsynchronizowany czas serwerów, aby uniknąć przedwczesnych odrzuceń. Aby zamienić czytelną datę na timestamp Unix, użyj naszego konwertera timestampów Unix.
Jak uzyskać klucz prywatny PKCS8 PEM dla RS256 lub ES256?
Dla RSA: openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out private.pem. Dla ECDSA P-256: openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -out ec-private.pem. Oba polecenia emitują blok PKCS8 PEM zaczynający się od -----BEGIN PRIVATE KEY-----, czyli dokładnie to, czego oczekuje to narzędzie. Wklej cały blok, łącznie z wierszami nagłówka i stopki. Pasujący klucz publiczny — używany do weryfikacji tokena — można wyprowadzić poleceniem openssl pkey -in private.pem -pubout.
Jak zweryfikować token, który właśnie wygenerowałem?
Wklej go do naszego dekodera JWT, aby potwierdzić, że header i payload dekodują się zgodnie z oczekiwaniami. Aby zweryfikować signature, użyj swojego serwera lub SDK z poprawnym kluczem: jwt.verify(token, secretOrPublicKey, { algorithms: ['HS256'] }) w Node.js, PyJWT.decode(token, key, algorithms=['RS256']) w Pythonie lub jwt.Parse(token, keyFunc) w Go. Nigdy nie weryfikuj z pustą listą algorytmów ani z verify_signature=False na produkcji — zawsze przypinaj dokładny algorytm, którego oczekujesz.
Co umieścić w payload?
Trzymaj go w ryzach. Zarejestrowane claims z RFC 7519 to iss (issuer), sub (subject — zwykle ID użytkownika), aud (audience), exp (expiration), nbf (not before), iat (issued at) oraz jti (ID tokena). Obok nich można dodać claims aplikacyjne, takie jak role, scope czy email. Nie umieszczaj sekretów w payload — JWT jest zakodowany, ale nieszyfrowany, więc każdy, kto ma token, może odczytać każdy claim. Utrzymuj tokeny poniżej około 4 KB, aby mieściły się w nagłówkach Authorization i w cookies.
Czy JWT jest szyfrowany?
Nie. Standardowy podpisany JWT (czyli JWS) jest zakodowany w Base64URL, a nie zaszyfrowany. Signature dowodzi, że token nie został zmodyfikowany i został wystawiony przez kogoś, kto ma klucz, ale header i payload są w pełni czytelne dla każdego, kto ma token. Jeśli potrzebujesz, aby sam payload był poufny, potrzebujesz JWE (zaszyfrowanego JWT), który jest innym formatem. To narzędzie tworzy podpisane tokeny JWS — taki rodzaj używany w zdecydowanej większości przepływów uwierzytelniania i autoryzacji.
Dlaczego podpisywanie RS256 lub ES256 zawodzi?
Najczęstsze przyczyny to: (1) klucz nie jest w formacie PKCS8 — przekonwertuj tradycyjny klucz -----BEGIN RSA PRIVATE KEY----- (PKCS1) poleceniem openssl pkcs8 -topk8 -nocrypt -in old.pem -out pkcs8.pem; (2) krzywa nie pasuje do algorytmu — ES256 wymaga klucza P-256, ES384 wymaga P-384, ES512 wymaga P-521; (3) wkleiłeś klucz publiczny lub certyfikat zamiast klucza prywatnego; albo (4) klucz jest zaszyfrowany hasłem, którego Web Crypto API nie potrafi bezpośrednio zaimportować. Odszyfruj go najpierw poleceniem openssl pkey i wklej niezaszyfrowany blok PKCS8.
Czy to narzędzie obsługuje niepodpisany token alg:none?
Nie, i to celowo. Token alg:none nie ma signature, co oznacza, że każdy może go sfałszować — jest źródłem klasycznej podatności obejścia uwierzytelniania JWT. Ponieważ całym sensem kodera jest tworzenie podpisanego tokena, to narzędzie oferuje wyłącznie prawdziwe algorytmy podpisu. Jeśli badasz alg:none na potrzeby bezpieczeństwa, możesz skonstruować taki token ręcznie, kodując header i payload w Base64URL i pozostawiając pusty segment signature — token kończy się wtedy kropką (header.payload.) — ale na produkcji nigdy nie wolno akceptować takiego tokena.
Czy mogę wygenerować JWT w kodzie zamiast tego?
Tak. W Node.js: jsonwebtoken.sign(payload, secret, { algorithm: 'HS256', expiresIn: '1h' }). W Pythonie: jwt.encode(payload, key, algorithm='RS256') z PyJWT. W Go: jwt.NewWithClaims(jwt.SigningMethodES256, claims).SignedString(privateKey). To narzędzie to najszybszy sposób na wytworzenie tokena do szybkiego testu, żądania curl lub fixture — ale w kodzie aplikacji tokeny powinieneś generować po stronie serwera utrzymywaną biblioteką i kluczem wczytanym z menedżera sekretów, nigdy zapisanym na sztywno.

Powiązane narzędzia

Zobacz wszystkie narzędzia →