Utilia

Dekodiranje JWT

Dekodiraj glavo in vsebino žetona JWT, preberi exp, iat in nbf kot datume ter lokalno v brskalniku preveri podpise HS256, RS256, PS256, ES256 ali EdDSA.

Žetoni so poverilnice. To orodje jih dekodira in preverja v tvojem brskalniku in jih nikamor ne pošlje.

Preveri podpis

HS256/384/512: vnesi skupno skrivnost. RS, PS, ES (256/384/512) in EdDSA: prilepi javni ključ kot PEM (javni ključ, javni ključ RSA ali potrdilo) ali JWK (nabor JWK se poišče po kid).

Kako dekodirati JWT

  1. Žeton prilepi v polje JSON Web Token. Deluje tudi cela vrednost Authorization: Bearer …: predpona Bearer in morebitni prelomi vrstic se odstranijo.
  2. Žeton se dekodira sproti med tipkanjem (ali s klikom na Dekodiraj). Glava in Vsebina (payload) se prikažeta kot oblikovan JSON, vsaka s svojim gumbom Kopiraj.
  3. Preberi tabelo Časovne trditve: exp, nbf in iat so prikazani z izvorno vrednostjo, datumom v tvojem časovnem pasu, relativnim časom (»čez 3 ure«, »pred 2 dnevoma«) in stanjem, na primer Poteklo ali Še ne velja.
  4. Oglej si opozorila nad rezultati, na primer kadar je alg enak none ali kadar je datum videti kot milisekunde.
  5. Če želiš preveriti podpis, v razdelku Preveri podpis vnesi ključ in klikni Preveri podpis.

Dekodiranje ni preverjanje

JWT sestavljajo trije deli v zapisu Base64url, ločeni s pikami: glava.vsebina.podpis. Glava in vsebina sta samo kodirani, ne šifrirani, zato ju lahko prebere vsak, ki ima žeton, to orodje pa lahko dekodira katerikoli žeton brez ključa. To pomeni tudi, da dekodirana vsebina ničesar ne dokazuje: nekdo jo je lahko spremenil. Samo veljaven podpis pokaže, da je žeton izdal imetnik ključa in da se od takrat ni spremenil. Zato vrstica stanja piše »Dekodirano (podpis ni preverjen)«, dokler podpisa ne preveriš.

Žeton s petimi deli je JWE (šifriran JWT); njegove vsebine brez ključa za dešifriranje ni mogoče prebrati, orodje pa te na to opozori.

Preverjanje podpisa

  • HS256, HS384, HS512 (HMAC): vnesi skupno Skrivnost. Z Obliko skrivnosti določi, ali gre za navadno besedilo (UTF-8) ali za Base64/Base64url, saj nekateri ponudniki skrivnosti hranijo v zapisu Base64. Prilepiš lahko tudi JWK vrste oct. Če je skrivnost krajša od izhoda zgoščene vrednosti (32 bajtov za HS256), orodje opozori, da je pod najmanjšo dolžino po RFC 7518.
  • RS256/384/512, PS256/384/512, ES256/384/512 in EdDSA: prilepi Javni ključ (PEM ali JWK). Sprejeti bloki PEM so PUBLIC KEY, RSA PUBLIC KEY in CERTIFICATE (ključ se prebere iz potrdila X.509). Deluje tudi JWK ali cel nabor JWK: uporabi se ključ, katerega kid se ujema z glavo. Zasebne ključe orodje zavrne, saj jih preverjevalnik nikoli ne potrebuje. EdDSA podpira Ed25519 v brskalnikih, ki ga v Web Crypto implementirajo.

Preverjanje uporablja API Web Crypto v brskalniku. Rezultat »Neveljaven podpis« pomeni, da je ključ napačen ali da je bil žeton spremenjen. Upoštevaj, da se algoritem prebere iz glave žetona: pravi strežnik mora namesto tega pričakovani algoritem določiti v svoji konfiguraciji, sicer ga lahko napadalec izbere sam.

Varnostne opombe

  • Žetoni so poverilnice. Kdor ima veljaven dostopni žeton, lahko običajno do njegovega poteka deluje kot njegov lastnik. To orodje vse dekodira in preverja v tvojem brskalniku ter žetona ali ključa nikamor ne pošlje. Kljub temu produkcijskih žetonov ne lepi v orodja, ki jih ne moreš pregledati.
  • alg: none pomeni, da žeton ni podpisan. Vsak ga lahko ponaredi, strežnik pa ga mora zavrniti. Orodje prikaže opozorilo in takega žetona noče »preveriti«.
  • Preverjanje ure tu uporablja uro tvojega računalnika brez tolerance; strežniki običajno dovolijo minuto ali dve odstopanja ure.
  • Datumi v JWT (NumericDate) so sekunde od 1. januarja 1970 UTC. 13-mestna vrednost so verjetno milisekunde, kar je pogosta napaka.

Pogosta vprašanja

Ali mi orodje pove, ali je žeton veljaven?

Pove ti, ali se podpis ujema s ključem, ki ga vneseš, in ali sta exp in nbf trenutno izpolnjena. Ali bo žeton sprejet, pa je odvisno tudi od preverjanj, ki jih pozna samo strežnik: pričakovani izdajatelj (iss), občinstvo (aud), algoritem in preklic.

Zakaj preverjanje ne uspe, čeprav je skrivnost prava?

Preveri Obliko skrivnosti: skrivnost v zapisu Base64, vtipkana kot besedilo, da drugačen ključ. Prepričaj se tudi, da skrivnosti nisi dodal presledka ali preloma vrstice, saj se ključi HMAC primerjajo bajt za bajtom.

Kakšna je razlika med RS256, PS256 in ES256?

Vsi trije so podpisi z javnim ključem z uporabo SHA-256. RS256 uporablja RSA z oblazinjenjem PKCS#1 v1.5, PS256 uporablja RSA z oblazinjenjem PSS, ES256 pa ECDSA na krivulji P-256, kar da bistveno krajše podpise.

Kje najdem javni ključ ponudnika?

Ponudniki identitete objavijo JWKS (JSON Web Key Set), običajno s povezavo iz /.well-known/openid-configuration pod jwks_uri. Odpri ga sam in prilepi JSON sem; orodje ključ izbere po kid in ničesar ne prenaša.

Ali je varno, da sem prilepim svoj žeton?

Žeton ostane v tvoji napravi: dekodiranje in preverjanje potekata lokalno in nič se ne naloži na strežnik. Za dodatno previdnost uporabi potekel ali testni žeton, kadar potrebuješ samo pregled zgradbe.