Utilia

JWT-generator og verifisering

Lag og verifiser JSON Web Tokens med HS256, RS256, PS256, ES256 eller EdDSA. Rediger felter, sett exp og iat, og sjekk signaturer lokalt i nettleseren din.

Nøkler og tokens er hemmeligheter. Alt signeres og verifiseres lokalt med Web Crypto API i nettleseren din: ingenting lastes opp.

Lag en signert JWT

Tidsfelter:

Verifiser en JWT

Slik lager du en signert JWT

  1. Velg Algoritme: HS256/384/512 (delt hemmelighet), RS256/384/512 eller PS256/384/512 (RSA), ES256/384/512 (ECDSA på P-256, P-384 eller P-521), eller EdDSA (Ed25519, når nettleseren din støtter det).
  2. Rediger Header (JSON) og Payload (JSON-felter). Feltet alg følger alltid den valgte algoritmen, og typ er som standard JWT.
  3. Bruk knappene for tidsfelter til å legge inn datoer: iat = nå, nbf = nå, eller velg en frist som «om 1 time» under Utløper etter og klikk Sett exp. Verdiene er NumericDate: sekunder siden 1. januar 1970 UTC.
  4. Skriv inn Hemmelighet (HS-algoritmer, som tekst eller Base64/Base64url under Format på hemmeligheten) eller Privat nøkkel (PEM eller JWK). Har du ingen nøkkel ennå? Klikk Generer testnøkkel.
  5. Klikk Signer token, og Kopier deretter resultatet, eller klikk Verifiser denne tokenen for å sjekke den med en gang.

Slik verifiserer du en JWT

  1. Lim inn tokenen under Token som skal verifiseres.
  2. Velg Forventet algoritme. Står den på «Fra token-headeren», godtas alt headeren sier, bortsett fra none. Velger du en bestemt algoritme, avviser verktøyet alle tokens som er signert på en annen måte, slik en ekte server bør gjøre.
  3. Skriv inn hemmeligheten eller Offentlig nøkkel (PEM eller JWK): en PEM-blokk av typen PUBLIC KEY, RSA PUBLIC KEY eller CERTIFICATE, en JWK eller et JWK Set (nøkkelen hvis kid samsvarer med headeren, brukes).
  4. Du kan sette en Klokketoleranse (sekunder) for å tåle små klokkeavvik. Klikk deretter Verifiser token.

Resultatet sier om signaturen er gyldig, og sjekker så exp (utløp) og nbf (ikke gyldig før) mot klokken på datamaskinen din. En token med riktig signatur, men utløpstid i fortiden, rapporteres som utløpt, ikke som gyldig.

Nøkler og formater

Til signering godtar verktøyet PKCS#8-blokker (PRIVATE KEY), PKCS#1-blokker (RSA PRIVATE KEY), SEC1-blokker (EC PRIVATE KEY, som konverteres internt til PKCS#8) og private JWK-er. Passordbeskyttede nøkler må først eksporteres uten passord. Generer testnøkkel lager en tilfeldig hemmelighet på hash-størrelse for HS-algoritmer, et RSA-nøkkelpar på 2048 bit for RS og PS, passende kurve for ES, eller et Ed25519-par. Du får nøklene som PEM og JWK, og de fylles inn på begge sider, slik at en rundtur fungerer med en gang.

Signaturene følger RFC 7515 og RFC 7518: RSA-PSS bruker et salt like langt som hashen, og ECDSA-signaturer er den rå sammenkjedingen r||s. Implementasjonen gjengir HS256-eksempelet i RFC 7515, vedlegg A.1.

Sikkerhetsmerknader

  • Alt kjører i nettleseren din med Web Crypto API. Verken tokens eller nøkler sendes noe sted, men du bør likevel foretrekke testnøkler framfor hemmeligheter fra produksjon.
  • alg: none signeres aldri og godtas aldri.
  • HMAC-hemmeligheter bør være minst like lange som hashen (32 byte for HS256). En kortere hemmelighet utløser en advarsel.
  • En signatur beviser integritet og opphav, ikke at innholdet i feltene er riktig: servere må også kontrollere iss, aud og tilganger (scopes).

Ofte stilte spørsmål

Hva er forskjellen på HS256 og RS256?

HS256 bruker én delt hemmelighet både til å signere og til å verifisere, så alle som kan verifisere, kan også forfalske tokens. RS256 (og PS256, ES256, EdDSA) signerer med en privat nøkkel og verifiserer med en offentlig nøkkel som trygt kan publiseres.

Hvorfor viser en gyldig signatur likevel en feil?

Fordi tokenen er utenfor gyldighetsperioden: exp ligger i fortiden, eller nbf ligger i fremtiden. Signaturkontrollen og tidskontrollen rapporteres hver for seg.

Hvorfor avvises alg «none»?

En usignert token kan lages av hvem som helst. Å godta den var en klassisk sårbarhet i JWT-biblioteker, så dette verktøyet avviser den både ved signering og ved verifisering.

Kan jeg bruke min egen RSA- eller EC-nøkkel?

Ja. Lim inn den private nøkkelen som PEM eller JWK for å signere, og den offentlige nøkkelen for å verifisere. Verktøyet kontrollerer at nøkkeltype og kurve passer til den valgte algoritmen.

Hvorfor er EdDSA deaktivert?

Nettleseren din støtter ikke Ed25519 i Web Crypto ennå. Nyere versjoner av Chrome, Edge, Firefox og Safari gjør det.