Utilia

JWT-generator och verifierare

Skapa och verifiera JSON Web Tokens med HS256, RS256, PS256, ES256 eller EdDSA. Redigera anspråk, sätt exp och iat och kontrollera signaturer lokalt.

Nycklar och token är hemliga. Allt signeras och verifieras lokalt med webbläsarens Web Crypto API: inget laddas upp.

Skapa en signerad JWT

Tidsanspråk:

Verifiera en JWT

Så skapar du en signerad JWT

  1. Välj Algoritm: HS256/384/512 (delad hemlighet), RS256/384/512 eller PS256/384/512 (RSA), ES256/384/512 (ECDSA på P-256, P-384 eller P-521) eller EdDSA (Ed25519, om din webbläsare stöder det).
  2. Redigera Header (JSON) och Payload (JSON-anspråk). Fältet alg följer alltid den valda algoritmen, och typ är JWT som standard.
  3. Lägg till datum med knapparna för tidsanspråk: iat = nu, nbf = nu, eller välj en fördröjning som ”om 1 timme” och klicka på Sätt exp. Värdena är NumericDate: sekunder sedan 1 januari 1970 UTC.
  4. Ange Hemlighet (för HS-algoritmer, som text eller Base64/Base64url under Hemlighetens format) eller Privat nyckel (PEM eller JWK). Har du ingen nyckel än? Klicka på Generera testnyckel.
  5. Klicka på Signera token och sedan på Kopiera, eller klicka på Verifiera den här token för att kontrollera den direkt.

Så verifierar du en JWT

  1. Klistra in din token under Token att verifiera.
  2. Välj Förväntad algoritm. Låter du den stå på ”Från token-headern” godtas det som headern anger, utom none. Väljer du en specifik algoritm vägrar verktyget att godta token som signerats på annat sätt, precis som en riktig server ska göra.
  3. Ange hemligheten eller nyckeln i Publik nyckel (PEM eller JWK): ett PEM-block av typen PUBLIC KEY, RSA PUBLIC KEY eller CERTIFICATE, en JWK eller en JWK Set (den nyckel vars kid matchar headern används).
  4. Ange vid behov en Klockmarginal (sekunder) för att tolerera små skillnader mellan klockor och klicka sedan på Verifiera token.

Resultatet visar om signaturen är giltig och kontrollerar sedan exp (utgångstid) och nbf (inte före) mot datorns aktuella tid. En token med korrekt signatur men en utgångstid som har passerat rapporteras som utgången, inte som giltig.

Nycklar och format

För signering godtar verktyget PKCS#8-block av typen PRIVATE KEY, PKCS#1-block RSA PRIVATE KEY och SEC1-block EC PRIVATE KEY (som konverteras till PKCS#8 internt), samt privata JWK:er. Lösenordsskyddade nycklar måste först exporteras utan lösenord. Generera testnyckel skapar en slumpmässig hemlighet i hashens storlek för HS-algoritmer, ett RSA-nyckelpar på 2048 bitar för RS och PS, rätt kurva för ES eller ett Ed25519-par. Du får nycklarna som PEM och JWK, och de fylls i på båda sidor så att du kan testa hela vägen direkt.

Signaturerna följer RFC 7515 och RFC 7518: RSA-PSS använder ett salt lika långt som hashen, och ECDSA-signaturer är den råa sammanslagningen r||s. Implementationen återger HS256-exemplet i RFC 7515, bilaga A.1.

Säkerhet

  • Allt körs i din webbläsare med Web Crypto API. Varken token eller nycklar skickas någonstans, men använd ändå hellre testnycklar än produktionshemligheter.
  • alg: none signeras aldrig och godtas aldrig.
  • HMAC-hemligheter bör vara minst lika långa som hashen (32 byte för HS256). En kortare hemlighet ger en varning.
  • En signatur bevisar integritet och ursprung, inte att anspråken är rimliga: servrar måste också kontrollera iss, aud och behörigheterna (scopes).

Vanliga frågor

Vad är skillnaden mellan HS256 och RS256?

HS256 använder en och samma delade hemlighet både för att signera och för att verifiera, så varje verifierare skulle också kunna förfalska token. RS256 (liksom PS256, ES256 och EdDSA) signerar med en privat nyckel och verifierar med en publik nyckel som kan publiceras utan risk.

Varför visas ett fel trots att signaturen är giltig?

Därför att token ligger utanför sin giltighetstid: exp har passerat eller nbf ligger i framtiden. Signaturkontrollen och tidskontrollen redovisas var för sig.

Varför avvisas alg ”none”?

En osignerad token kan skapas av vem som helst. Att godta sådana var en klassisk sårbarhet i JWT-bibliotek, så verktyget avvisar dem både vid signering och vid verifiering.

Kan jag använda min egen RSA- eller EC-nyckel?

Ja. Klistra in den privata nyckeln som PEM eller JWK för att signera och den publika nyckeln för att verifiera. Verktyget kontrollerar att nyckeltypen och kurvan passar den valda algoritmen.

Varför är EdDSA avstängt?

Din webbläsare stöder ännu inte Ed25519 i Web Crypto. Nya versioner av Chrome, Edge, Firefox och Safari gör det.