JSON Web Token sa často opisuje ako prihlasovací token, no samotný formát nikoho neprihlasuje. Je to kompaktná správa s tvrdeniami: kto ju vydal, koho označuje, pre ktorú službu je určená a dokedy platí. Príjemca dokáže obsah prečítať a pomocou kryptografického podpisu overiť, či správu vytvoril dôveryhodný vydavateľ a či sa nezmenila. Bezpečnosť teda nevzniká z nezrozumiteľného reťazca, ale zo správnej práce s kľúčmi a prísnej validácie.
Tri segmenty majú rozdielne úlohy
Bežný podpísaný JWT obsahuje header, payload a signature oddelené bodkami. Header uvádza typ a algoritmus. Payload nesie JSON claims. Podpis chráni presnú encoded podobu prvých dvoch segmentov.
Segmenty používajú Base64URL, aby sa dali bezpečne preniesť v HTTP hlavičke či cookie. Base64URL nie je šifrovanie. Header aj payload dekóduje ktokoľvek bez tajného kľúča.
Podpis chráni presné bajty
Pri symetrickom algoritme podpisujúca aj overujúca strana poznajú rovnaké tajomstvo. Pri asymetrickom modeli vydavateľ používa privátny kľúč a služby overujú verejným. Tie potom môžu token prijať bez možnosti vytvárať nové.
Platný podpis iba dokazuje vzťah medzi dátami a kľúčom. Aplikácia musí vedieť, komu kľúč patrí, či je algoritmus povolený a či vydavateľ patrí do jej trust modelu.
Štandardné claims vytvárajú spoločný slovník
iss označuje vydavateľa, sub subjekt, aud publikum, exp koniec platnosti a nbf začiatok použiteľnosti. Formát ich technicky nevyžaduje, bezpečný protokol však určí povinné položky.
Audience zabraňuje použitiu tokenu pre inú službu. Issuer vylučuje podpisy neznámej autority a časové claims obmedzujú obdobie zneužitia. Claim, ktorý verifier nekontroluje, neprináša ochranu.
Lokálne overovanie pomáha distribuovaným službám
API môže podpis a claims vyhodnotiť bez session lookupu pri každom requeste. Verejné kľúče sa dajú distribuovať mnohým službám a jeden identity provider zostáva jediným vydavateľom.
Táto nezávislosť komplikuje okamžitú revokáciu. Token môže tvrdiť starú rolu až do expirácie. Krátka životnosť, refresh flow, key rotation a cielená revokácia musia byť súčasťou návrhu.
Podpis a šifrovanie riešia iné požiadavky
Väčšina API tokenov je podpísaná, nie šifrovaná. Obsah je viditeľný, podpis bráni nepozorovanej zmene. JWE dokáže claims skryť, ale pridáva správu kľúčov a interoperabilitu.
Šifrovanie nemá ospravedlniť nadbytočné osobné údaje v tokene. Aj šifrovaný bearer token musí byť chránený pred krádežou, pretože jeho držiteľ môže získať prístup.
Claims starnú okamžite po vydaní
Rola, tenant status alebo oprávnenie sa môže zmeniť sekundu po vytvorení tokenu. Samostatný JWT o zmene nevie. Citlivé rozhodnutia preto môžu potrebovať aktuálny lookup alebo veľmi krátku expiraciu.
Do tokenu patria stabilné a potrebné údaje. Veľký payload sa prenáša pri každom requeste, zvyšuje limity hlavičiek a rozširuje počet miest s osobnými dátami.
Bearer token je plnohodnotné credential
Podpis neurčuje, kto token práve predložil. Väčšina access tokenov funguje na princípe držiteľa. Únik do logu, URL, analytics či support ticketu môže stačiť na zneužitie.
TLS, redakcia Authorization hlavičky a krátka platnosť sú základ. Storage v browseri sa hodnotí podľa XSS, CSRF a architektúry domén, nie podľa všeobecného pravidla.
Overovanie musí byť presne nakonfigurované
Verifier vyberá povolené algoritmy zo svojej konfigurácie, nie podľa želania v headeri tokenu. Key ID môže vyberať iba z dôveryhodnej sady a nesmie sa zmeniť na arbitrary file path alebo URL.
Po podpise sa overí issuer, audience, čas, tenant a doménové claims. Chybová odpoveď neodhaľuje kryptografické detaily a log neobsahuje celý živý token.
Rotácia kľúčov potrebuje prekryv
Vydavateľ publikuje aktuálne verejné kľúče s jednoznačnými identifikátormi. Starý kľúč zostane dostupný dostatočne dlho, aby dobehli tokeny, potom sa odstráni. Verifier cache obnovuje včas, no krátky výpadok key endpointu nesmie odstaviť všetky requesty.
Núdzová rotácia musí vedieť kompromitovaný kľúč vyradiť rýchlo a zmerať, ktoré služby stále používajú starú konfiguráciu.
Zmena tokenového kontraktu je distribuovaný rollout
Pridanie povinného claimu, nového audience alebo zmena issuer hodnoty ovplyvní vydavateľa aj každého verifiera. Bez prechodného obdobia môže bezpečnostné sprísnenie odstaviť časť systému. Bez termínu ukončenia zostane stará benevolentná cesta otvorená navždy.
Rollout najprv nasadí verifier schopný prijať nový tvar, potom začne issuer nové údaje emitovať a telemetry ukáže nekompatibilných spotrebiteľov. Až po ich migrácii sa starý variant odmietne. Kontraktné testy majú používať skutočné kľúče pre testovacie prostredie a rovnakú knižnicu ako produkcia.
Proof-of-possession rieši inú hrozbu než podpis
Bežný bearer JWT môže použiť každý držiteľ. Niektoré vysoko rizikové protokoly preto viažu token na klientsky kľúč alebo TLS certifikát. Request musí obsahovať ďalší kryptografický dôkaz a ukradnutý token sám nestačí.
Taký model zvyšuje komplexitu správy klientskych kľúčov, replay ochrany a mobilných zariadení. Nemá sa zavádzať automaticky, ale až pri jasnom riziku, ktoré kratšia platnosť a bezpečný transport dostatočne neriešia.
Klient zároveň potrebuje bezpečný spôsob obnovy kľúča pri strate zariadenia a server musí vedieť starú väzbu zrušiť.
Audit musí rozlíšiť bežnú obnovu od podozrivého pokusu.
JWT je podpísaná správa, nie magická identita
Formát je užitočný, keď niekoľko príjemcov potrebuje prenosné a nezávisle overiteľné claims. Neodstraňuje autentizačný lifecycle, revokáciu ani objektovú autorizáciu.
Správny mentálny model je jednoduchý: obsah je čitateľný, platnosť závisí od kontextu a držba môže udeliť prístup. S prísnym kontraktom je JWT praktický stavebný prvok; bez neho iba komplikovanejší string, ktorému aplikácia dôveruje.
Každá zmena tohto kontraktu potrebuje kompatibilný rollout a audit.