JWT Encoder

Vytvářejte a podepisujte JSON Web Tokens s HS256, HS384, HS512

Záhlaví

Běží lokálně · Bezpečné pro vkládání tajných údajů

Datová část

Běží lokálně · Bezpečné pro vkládání tajných údajů

Tajný klíč

Běží lokálně · Bezpečné pro vkládání tajných údajů

Zakódovaný JWT

Output will appear here…

Váš tajný klíč nikdy neopustí váš prohlížeč. Veškeré podepisování probíhá na straně klienta.

Vyzkoušejte také:JWT Decoder

Co je kódování JWT?

Kódování JWT je proces vytváření JSON Web Token — kompaktního řetězce bezpečného pro URL, který nese sadu tvrzení podepsaných kryptografickým klíčem. Výsledkem je token se třemi částmi (záhlaví.data.podpis) definovaný RFC 7519, který mohou servery ověřit bez zachování stavu relace.

Header deklaruje podpisový algoritmus (např. HS256) a typ tokenu. Payload obsahuje claims — páry klíč-hodnota jako subjekt (sub), čas expirace (exp) a libovolná vlastní data, která vaše aplikace potřebuje. Obě části jsou serializovány jako JSON a poté zakódovány v base64url. Podpis je vypočítán nad zakódovaným headerem a payloadem pomocí tajného klíče, čímž jsou všechny tři segmenty svázány dohromady.

Na rozdíl od session cookies jsou JWTs soběstačné: ověřovatel nepotřebuje dotazovat databázi ani volat externí službu. To dělá autentizaci na bázi JWT oblíbenou v REST API, mikroslužbách a jednostránkových aplikacích, kde bezstavová autorizace snižuje latenci a zjednodušuje horizontální škálování.

Proč používat JWT Encoder?

Ruční generování JWTs vyžaduje kódování base64url, serializaci JSON a výpočet HMAC. Tento nástroj zvládne všechny tři kroky okamžitě, takže se můžete soustředit na správné nastavení claims.

Okamžité generování tokenů
Upravte header, payload a tajný klíč — podepsaný JWT se aktualizuje v reálném čase. Žádný krok sestavení, žádná instalace knihovny, žádný kód.
🔒
Více HMAC algoritmů
Přepínejte mezi HS256, HS384 a HS512 jedním kliknutím. Header se automaticky aktualizuje a podpis je okamžitě přepočítán.
🛡️
Zpracování zaměřené na soukromí
Veškeré podepisování probíhá ve vašem prohlížeči pomocí Web Crypto API. Váš tajný klíč a data payloadu nikdy neopustí vaše zařízení — žádný server, žádné logy, žádné riziko.
📋
Pomocníci pro claims jedním kliknutím
Přidejte časová razítka iat, exp+1h nebo exp+24h jediným tlačítkem. Není třeba ručně počítat Unixová časová razítka ani vyhledávat aktuální čas epochy.

Případy použití JWT Encoderu

Testování autentizace na frontendu
Generujte tokeny s konkrétními claims a časy expirace pro testování přihlašovacích toků, logiky obnovení tokenů a ochrany chráněných tras bez nutnosti spouštět backendový autentizační server.
Vývoj backendového API
Vytvářejte testovací tokeny s vlastními claims sub, aud a scope pro testování autorizačního middleware, řízení přístupu na základě rolí a kontrol oprávnění při lokálním vývoji.
DevOps a CI/CD pipeline
Generujte krátkodobé servisní tokeny pro nasazovací skripty, integrační testy nebo komunikaci mezi službami, kde by plný OAuth tok přidával zbytečnou složitost.
QA a manuální testování
Sestavujte tokeny s hraničními claims — expirované tokeny, chybějící pole, špatní příjemci — a ověřujte, že vaše API vrací správné odpovědi HTTP 401 nebo 403.
Bezpečnostní audit
Vytvářejte tokeny podepsané různými algoritmy a délkami tajného klíče pro ověření, že vaše logika ověřování správně odmítá slabé nebo neodpovídající podpisy.
Učení a prototypování
Studenti a vývojáři začínající s JWT mohou experimentovat s poli headeru, strukturami claims a podpisovými algoritmy, aby pochopili, jak funguje každá část tokenu.

HS256 vs HS384 vs HS512: Srovnání HMAC algoritmů

Všechny tři algoritmy používají HMAC (Hash-based Message Authentication Code) se sdíleným tajemstvím. Rozdíl spočívá v použité hashovací funkci, která ovlivňuje délku podpisu a bezpečnostní rezervu. Pro většinu aplikací poskytuje HS256 dostatečnou bezpečnost. Zvolte HS384 nebo HS512, pokud to vyžadují compliance požadavky (např. FIPS-140) nebo pokud vaše tokeny nesou autorizační rozhodnutí s vysokou hodnotou.

AlgoritmusHashPodpisRychlostTypické použití
HS256SHA-25632 BFastestGeneral purpose, default for most libraries
HS384SHA-38448 BFastHigher security margin, FIPS-140 compliant
HS512SHA-51264 BFastMaximum HMAC security, large payloads

Referenční přehled standardních JWT claims

RFC 7519 definuje sedm registrovaných claims. Žádný není povinný, ale jejich správné použití zlepšuje interoperabilitu a bezpečnost. Claim exp je obzvláště důležitý — tokeny bez expirace jsou platné donekonečna, pokud není tajný klíč obměněn.

ClaimNázevPopisPříklad
issIssuerWho issued the token"auth.example.com"
subSubjectWho the token represents"user-123"
audAudienceIntended recipient service"api.example.com"
expExpirationUnix timestamp — token invalid after this time1717203600
nbfNot BeforeUnix timestamp — token invalid before this time1717200000
iatIssued AtUnix timestamp when the token was created1717200000
jtiJWT IDUnique token identifier for revocation tracking"a1b2c3d4"

Kódování JWT v kódu

Tyto příklady ukazují, jak programově vytvářet a podepisovat JWTs. Každý úryvek vytvoří platný token podepsaný HS256. V produkčních systémech vždy nastavte claim exp a použijte kryptograficky náhodný tajný klíč o délce alespoň 256 bitů.

JavaScript (Web Crypto API)
async function signJWT(payload, secret, alg = 'HS256') {
  const header = { alg, typ: 'JWT' }
  const enc = new TextEncoder()

  // Base64url encode header and payload
  const b64url = (obj) =>
    btoa(JSON.stringify(obj)).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '')

  const h = b64url(header)
  const p = b64url(payload)

  // Sign with HMAC-SHA256
  const key = await crypto.subtle.importKey(
    'raw', enc.encode(secret),
    { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']
  )
  const sig = await crypto.subtle.sign('HMAC', key, enc.encode(`${h}.${p}`))
  const s = btoa(String.fromCharCode(...new Uint8Array(sig)))
    .replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '')

  return `${h}.${p}.${s}`
}

// Usage
const token = await signJWT(
  { sub: 'user-123', name: 'Alice', iat: Math.floor(Date.now() / 1000) },
  'your-256-bit-secret'
)
// → "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOi..."
Python (PyJWT)
import jwt
import time

payload = {
    "sub": "user-123",
    "name": "Alice",
    "iat": int(time.time()),
    "exp": int(time.time()) + 3600,  # expires in 1 hour
}

# Sign with HS256 (default)
token = jwt.encode(payload, "your-256-bit-secret", algorithm="HS256")
# → "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOi..."

# Verify and decode
decoded = jwt.decode(token, "your-256-bit-secret", algorithms=["HS256"])
# → {"sub": "user-123", "name": "Alice", "iat": 1717200000, "exp": 1717203600}
Node.js (jsonwebtoken)
const jwt = require('jsonwebtoken')

const payload = {
  sub: 'user-123',
  name: 'Alice',
  role: 'admin',
}

// Sign — iat is added automatically
const token = jwt.sign(payload, 'your-256-bit-secret', {
  algorithm: 'HS256',
  expiresIn: '1h',    // sets exp claim
  issuer: 'auth.example.com',  // sets iss claim
})

// Verify
const decoded = jwt.verify(token, 'your-256-bit-secret')
// → { sub: 'user-123', name: 'Alice', role: 'admin', iat: ..., exp: ... }
Go (golang-jwt)
package main

import (
    "fmt"
    "time"
    "github.com/golang-jwt/jwt/v5"
)

func main() {
    claims := jwt.MapClaims{
        "sub":  "user-123",
        "name": "Alice",
        "iat":  time.Now().Unix(),
        "exp":  time.Now().Add(time.Hour).Unix(),
    }

    token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
    signed, _ := token.SignedString([]byte("your-256-bit-secret"))
    fmt.Println(signed)
    // → eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOi...
}

Nejčastější otázky

Jaký je rozdíl mezi kódováním a dekódováním JWT?
Kódování JWT vytvoří podepsaný token z headeru, payloadu a tajného klíče. Dekódování JWT obrátí tento proces — přečte header a payload zakódované v base64url zpět do JSON. Dekódování nevyžaduje tajný klíč; kódování jej vždy vyžaduje, protože musí být vypočítán podpis.
Jak dlouhý by měl být tajný klíč JWT?
Pro HS256 použijte tajný klíč o délce alespoň 256 bitů (32 bajtů). Pro HS384 alespoň 384 bitů (48 bajtů). Pro HS512 alespoň 512 bitů (64 bajtů). Kratší tajné klíče jsou většinou knihoven technicky přijímány, ale snižují efektivní bezpečnost podpisu HMAC. Generujte tajné klíče pomocí kryptograficky bezpečného generátoru náhodných čísel, nikoliv člověkem zvolenou přístupovou frází.
Je bezpečné používat tento nástroj s reálnými tajnými klíči?
Tento nástroj zpracovává vše ve vašem prohlížeči pomocí Web Crypto API — žádná data nejsou odesílána na žádný server. Přesto se jako obecná bezpečnostní praxe vyhýbejte vkládání produkčních tajných klíčů do jakýchkoli webových nástrojů. Pro správu produkčních klíčů používejte proměnné prostředí nebo správce tajemství jako HashiCorp Vault nebo AWS Secrets Manager.
Mám pro svou aplikaci použít HS256 nebo RS256?
Použijte HS256, pokud stejná služba tokeny jak vytváří, tak ověřuje — je rychlejší a jednodušší. Použijte RS256 (asymetrický), pokud třetí strany potřebují ověřovat vaše tokeny bez schopnosti je vytvářet. RS256 je běžný v OAuth 2.0 providerech, OpenID Connect a multi-tenant SaaS architekturách.
Proč můj JWT expiruje okamžitě po vytvoření?
Claim exp používá Unixová časová razítka v sekundách, nikoli milisekundách. Pokud nastavíte exp na Date.now() (které vrací milisekundy), token bude vypadat, že expiruje tisíce let v budoucnosti — nebo pokud omylem použijete hodnotu v milisekundách tam, kde jsou očekávány sekundy, knihovny jej mohou interpretovat jako již expirovaný. Vždy používejte Math.floor(Date.now() / 1000) v JavaScriptu nebo int(time.time()) v Pythonu.
Mohu do payloadu JWT vložit citlivá data?
Technicky ano, ale neměli byste. Payload JWT je zakódován v base64url, nikoliv zašifrován — kdokoli s tokenem může claims přečíst. Neukládejte hesla, čísla platebních karet ani osobní údaje do payloadu. Pokud musíte citlivé informace zahrnout, použijte JWE (JSON Web Encryption) definované v RFC 7516, které celý payload šifruje.
Co se stane, pokud změním payload po podpisu?
Podpis se stane neplatným. Podpis HMAC je vypočítán nad přesnými bajty zakódovaného headeru a payloadu. Jakákoli změna — i přidání mezery nebo změna jediného znaku — vytvoří zcela odlišný podpis. Správně implementovaný ověřovatel token odmítne s chybou nesouladu podpisu.