Utilia

Generator in preverjevalnik JWT

Ustvari in preveri žetone JSON Web Token s HS256, RS256, PS256, ES256 ali EdDSA. Uredi trditve, nastavi exp in iat ter lokalno v brskalniku preveri podpise.

Ključi in žetoni so skrivnosti. Vse se podpiše in preveri lokalno z API-jem Web Crypto v tvojem brskalniku: nič se ne naloži na strežnik.

Ustvari podpisan JWT

Časovne trditve:

Preveri JWT

Kako ustvariti podpisan JWT

  1. Izberi Algoritem: HS256/384/512 (skupna skrivnost), RS256/384/512 ali PS256/384/512 (RSA), ES256/384/512 (ECDSA na krivuljah P-256, P-384 ali P-521) ali EdDSA (Ed25519, če ga tvoj brskalnik podpira).
  2. Uredi Glavo (JSON) in Vsebino (trditve JSON). Polje alg vedno sledi izbranemu algoritmu, typ pa je privzeto JWT.
  3. Z gumbi za časovne trditve dodaj datume: iat = zdaj, nbf = zdaj ali izberi zamik, na primer »čez 1 uro«, in klikni Nastavi exp. Vrednosti so NumericDate: sekunde od 1. januarja 1970 UTC.
  4. Vnesi Skrivnost (algoritmi HS, kot besedilo ali Base64/Base64url pri Obliki skrivnosti) ali Zasebni ključ (PEM ali JWK). Še nimaš ključa? Klikni Ustvari testni ključ.
  5. Klikni Podpiši žeton, nato rezultat Kopiraj ali klikni Preveri ta žeton, da ga takoj preveriš.

Kako preveriti JWT

  1. Žeton prilepi pod Žeton za preverjanje.
  2. Izberi Pričakovani algoritem. Če pustiš »Iz glave žetona (nikoli none)«, se sprejme vse, kar piše v glavi, razen none; če izbereš določen algoritem, orodje zavrne vsak žeton, podpisan drugače, kot bi moral storiti tudi pravi strežnik.
  3. Vnesi skrivnost ali Javni ključ (PEM ali JWK): blok PEM PUBLIC KEY, RSA PUBLIC KEY ali CERTIFICATE, JWK ali nabor JWK (uporabi se ključ, katerega kid se ujema z glavo).
  4. Po želji nastavi Toleranco ure (sekunde), da se dopustijo majhne razlike v uri, nato klikni Preveri žeton.

Rezultat pove, ali je podpis veljaven, nato pa exp (potek) in nbf (ne velja pred) primerja s trenutnim časom tvojega računalnika. Žeton s pravilnim podpisom, a potekom v preteklosti, je prikazan kot potekel, ne kot veljaven.

Ključi in oblike zapisa

Za podpisovanje orodje sprejme bloke PKCS#8 PRIVATE KEY, PKCS#1 RSA PRIVATE KEY in SEC1 EC PRIVATE KEY (interno pretvorjene v PKCS#8) ter zasebne ključe JWK. Ključe, zaščitene z geslom, moraš najprej izvoziti brez gesla. Ustvari testni ključ naredi naključno skrivnost velikosti zgoščene vrednosti za algoritme HS, par ključev RSA z 2048 biti za RS in PS, ustrezno krivuljo za ES ali par Ed25519. Ključe dobiš kot PEM in JWK, vneseni pa so na obeh straneh, tako da obhod podpis–preverjanje deluje takoj.

Podpisi sledijo RFC 7515 in RFC 7518: RSA-PSS uporablja sol, dolgo toliko kot zgoščena vrednost, podpisi ECDSA pa so surova združitev r||s. Implementacija reproducira primer HS256 iz RFC 7515, dodatek A.1.

Varnostne opombe

  • Vse teče v tvojem brskalniku z API-jem Web Crypto. Žetoni in ključi se nikamor ne pošiljajo, a vseeno raje uporabljaj testne ključe kot produkcijske skrivnosti.
  • alg: none ni nikoli podpisan in nikoli sprejet.
  • Skrivnosti HMAC naj bodo vsaj tako dolge kot zgoščena vrednost (32 bajtov za HS256). Krajša skrivnost sproži opozorilo.
  • Podpis dokazuje celovitost in izvor, ne pa tega, da so trditve primerne: strežniki morajo preveriti tudi iss, aud in obsege (scopes).

Pogosta vprašanja

Kakšna je razlika med HS256 in RS256?

HS256 uporablja eno skupno skrivnost za podpisovanje in preverjanje, zato bi lahko vsak preverjevalnik žetone tudi ponarejal. RS256 (pa tudi PS256, ES256, EdDSA) podpisuje z zasebnim ključem, preverja pa z javnim ključem, ki ga je varno objaviti.

Zakaj se ob veljavnem podpisu še vedno prikaže napaka?

Ker je žeton zunaj svojega obdobja veljavnosti: exp je v preteklosti ali nbf v prihodnosti. Preverjanje podpisa in preverjanje časa se prikažeta ločeno.

Zakaj je alg »none« zavrnjen?

Nepodpisan žeton lahko ustvari vsak. Njegovo sprejemanje je bila klasična ranljivost knjižnic JWT, zato ga to orodje zavrne pri podpisovanju in pri preverjanju.

Ali lahko uporabim lasten ključ RSA ali EC?

Da. Za podpisovanje prilepi zasebni ključ kot PEM ali JWK, za preverjanje pa javni ključ. Orodje preveri, ali vrsta ključa in krivulja ustrezata izbranemu algoritmu.

Zakaj je EdDSA onemogočen?

Tvoj brskalnik v API-ju Web Crypto še ne podpira Ed25519. Novejše različice brskalnikov Chrome, Edge, Firefox in Safari ga podpirajo.