JSON Web Token (JWT) představuje způsob pro bezpečnou výměnu informací mezi dvěma stranami.
JWT je JSON objekt, který se skládá z hlavičky (header), dat (payload) a podpisu (signature). Podle specifikace RFC 7519.
Cílem JWT je možnost ověření autenticity dat – skutečnosti, že data nebyla cestou změněna. Nikoli však skrýt obsah dat.
Účelem zakódování dat je převod struktury dat do lépe přenositelné podoby.
Použití JSON Web Tokenu
V běžném případě máme uživatele, aplikaci (aplikační server) a autentizační server.
- Uživatel se přihlásí (autentizuje) na autentizačním serveru (prostřednictvím jména a hesla, Google přihlášení apod.).
- Autentizační server ověří identitu uživatele a vytvoří JWT, který poskytne uživateli.
- Uživatel použije JWT při komunikaci s aplikací (např. volání API rozhraní).
Formát JWT
header.payload.signature
Např.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Hlavička (header)
Obsahuje informace o způsobu výpočtu podpisu.
{ "typ": "JWT" "alg": "HS256", }
- typ – typ objektu
- alg – typ algoritmu pro vytvoření hashe
Data (payload)
{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 }
- přenášená data
- definovaná klíčová slova
- iss – vydavatel
- sub – subjekt
- exp – čas vypršení
- libovolná vlastní uživatelská data
- definovaná klíčová slova
Podpis (signature)
Podpis je vytvořen na základě výpočtu:
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
256-bit-secret
)
Implementace
Seznam implementace JWT pro různé jazyky je uveden na webu jwt.io.