Utilia

JWT-dekoder

Afkod header og payload i et JWT, læs exp, iat og nbf som datoer, og verificér HS256-, RS256-, PS256-, ES256- eller EdDSA-signaturer lokalt i din browser.

Tokens er legitimationsoplysninger. Dette værktøj afkoder og verificerer dem i din browser og sender dem aldrig nogen steder hen.

Verificér signaturen

HS256/384/512: indtast den delte hemmelighed. RS, PS, ES (256/384/512) og EdDSA: indsæt den offentlige nøgle som PEM (public key, RSA public key eller certifikat) eller JWK (et JWK Set matches via kid).

Sådan afkoder du et JWT

  1. Indsæt tokenet i JSON Web Token. En hel Authorization: Bearer …-værdi virker også: præfikset Bearer og eventuelle linjeskift fjernes.
  2. Tokenet afkodes, mens du skriver (eller klik på Afkod). Header og Payload vises som formateret JSON, hver med sin egen Kopiér-knap.
  3. Læs tabellen Tidsclaims: exp, nbf og iat vises med den rå værdi, datoen i din tidszone, en relativ tid (»om 3 timer«, »for 2 dage siden«) og en status som Udløbet eller Endnu ikke gyldigt.
  4. Tjek advarslerne over resultaterne, for eksempel hvis alg er none, eller hvis en dato ligner millisekunder.
  5. Vil du kontrollere signaturen, så udfyld nøglen under Verificér signaturen og klik på Verificér signatur.

At afkode er ikke det samme som at verificere

Et JWT består af tre Base64url-dele adskilt af punktummer: header.payload.signature. Header og payload er kun kodet, ikke krypteret, så alle, der har tokenet, kan læse dem, og dette værktøj kan afkode ethvert token uden nøgle. Det betyder også, at en afkodet payload ikke beviser noget: nogen kan have redigeret den. Kun en gyldig signatur viser, at tokenet er udstedt af ejeren af nøglen, og at det ikke er ændret siden. Statuslinjen skriver derfor »Afkodet (signaturen er ikke verificeret)«, indtil du verificerer den.

Et token med fem dele er et JWE (krypteret JWT). Indholdet kan ikke læses uden dekrypteringsnøglen, og værktøjet fortæller dig det.

Sådan verificerer du signaturen

  • HS256, HS384, HS512 (HMAC): indtast den delte Hemmelighed. Brug Format for hemmeligheden til at angive, om den er almindelig tekst (UTF-8) eller Base64/Base64url, da nogle udbydere gemmer hemmeligheder i Base64. Du kan også indsætte en JWK af typen oct. Hvis hemmeligheden er kortere end hashværdien (32 byte for HS256), gør værktøjet opmærksom på, at den ligger under minimum i RFC 7518.
  • RS256/384/512, PS256/384/512, ES256/384/512 og EdDSA: indsæt den Offentlig nøgle (PEM eller JWK). Accepterede PEM-blokke er PUBLIC KEY, RSA PUBLIC KEY og CERTIFICATE (nøglen læses fra X.509-certifikatet). En JWK eller et helt JWK Set virker også: den nøgle, hvis kid svarer til headeren, bruges. Private nøgler afvises; en verifikation har aldrig brug for dem. EdDSA understøtter Ed25519 i browsere, hvor Web Crypto implementerer den.

Verificeringen bruger browserens Web Crypto API. Resultatet »Ugyldig signatur« betyder, at nøglen er forkert, eller at tokenet er ændret. Bemærk, at algoritmen hentes fra tokenets header: en rigtig server skal i stedet fastlægge den forventede algoritme i sin konfiguration, ellers kan en angriber vælge den.

Sikkerhedsnoter

  • Tokens er legitimationsoplysninger. Den, der har et gyldigt adgangstoken, kan som regel handle som ejeren, indtil det udløber. Dette værktøj afkoder og verificerer alt i din browser og sender aldrig tokenet eller nøglen nogen steder hen. Undgå alligevel at indsætte produktionstokens i værktøjer, du ikke selv kan inspicere.
  • alg: none betyder, at tokenet ikke er signeret. Alle kan forfalske et sådant token, og en server skal afvise det. Værktøjet viser en advarsel og nægter at »verificere« et sådant token.
  • Tidskontrollerne bruger din computers ur uden nogen tolerance; servere tillader ofte et minut eller to i urafvigelse.
  • JWT-datoer (NumericDate) er sekunder siden 1. januar 1970 UTC. En værdi med 13 cifre er sandsynligvis i millisekunder, hvilket er en almindelig fejl.

Ofte stillede spørgsmål

Kan værktøjet fortælle mig, om et token er gyldigt?

Det kan fortælle dig, om signaturen passer til en nøgle, du angiver, og om exp og nbf er opfyldt lige nu. Om tokenet bliver accepteret, afhænger også af kontroller, som kun serveren kender: forventet udsteder (iss), målgruppe (aud), algoritme og tilbagekaldelse.

Hvorfor mislykkes verificeringen, selvom hemmeligheden er rigtig?

Tjek Format for hemmeligheden: en Base64-hemmelighed indtastet som tekst giver en anden nøgle. Sørg også for, at der ikke er kommet et mellemrum eller et linjeskift med i hemmeligheden, da HMAC-nøgler sammenlignes byte for byte.

Hvad er forskellen på RS256, PS256 og ES256?

Alle tre er signaturer med offentlig nøgle og SHA-256. RS256 bruger RSA med PKCS#1 v1.5-padding, PS256 bruger RSA med PSS-padding, og ES256 bruger ECDSA på P-256-kurven, hvilket giver meget kortere signaturer.

Hvor finder jeg en udbyders offentlige nøgle?

Identitetsudbydere udgiver et JWKS (JSON Web Key Set), som oftest er linket fra /.well-known/openid-configuration under jwks_uri. Åbn det selv, og indsæt JSON her; værktøjet vælger nøglen via kid og henter aldrig noget.

Er det sikkert at indsætte mit token her?

Tokenet bliver på din enhed: afkodning og verificering sker lokalt, og intet uploades. Vil du være ekstra forsigtig, så brug et udløbet token eller et testtoken, hvis du kun skal se strukturen.