Utilia

JWT-dekoder

Dekod header og payload i en JWT, les exp, iat og nbf som datoer, og verifiser HS256-, RS256-, PS256-, ES256- og EdDSA-signaturer lokalt i nettleseren din.

Tokens er legitimasjon. Dette verktøyet dekoder og verifiserer dem i nettleseren din og sender dem aldri noe sted.

Verifiser signaturen

HS256/384/512: skriv inn den delte hemmeligheten. RS, PS, ES (256/384/512) og EdDSA: lim inn den offentlige nøkkelen som PEM (public key, RSA public key eller sertifikat) eller JWK (et JWK Set matches på kid).

Slik dekoder du en JWT

  1. Lim inn tokenen i feltet JSON Web Token. En hel Authorization: Bearer …-verdi fungerer også: prefikset Bearer og eventuelle linjeskift fjernes.
  2. Tokenen dekodes mens du skriver (eller du kan klikke Dekod). Header og Payload vises som formatert JSON, hver med sin egen Kopier-knapp.
  3. Les tabellen Tidsfelter: exp, nbf og iat vises med råverdi, dato i tidssonen din, relativ tid («om 3 timer», «for 2 dager siden») og en status som Utløpt eller Ikke gyldig ennå.
  4. Se på advarslene over resultatet, for eksempel når alg er none, eller når en dato ser ut til å være i millisekunder.
  5. Vil du sjekke signaturen, fyller du inn nøkkelen under Verifiser signaturen og klikker Verifiser signatur.

Å dekode er ikke det samme som å verifisere

En JWT består av tre Base64url-deler atskilt med punktum: header.payload.signature. Header og payload er bare kodet, ikke kryptert, så alle som har tokenen kan lese dem, og dette verktøyet kan dekode hvilken som helst token uten nøkkel. Det betyr også at en dekodet payload ikke beviser noe: noen kan ha endret den. Bare en gyldig signatur viser at tokenen er utstedt av den som har nøkkelen, og at den ikke er endret siden. Statuslinjen sier derfor «Dekodet (signaturen er ikke verifisert)» helt til du verifiserer den.

En token med fem deler er en JWE (kryptert JWT). Innholdet kan ikke leses uten dekrypteringsnøkkelen, og verktøyet forteller deg det.

Slik verifiserer du signaturen

  • HS256, HS384, HS512 (HMAC): skriv inn den delte Hemmeligheten. Under Format på hemmeligheten velger du om den er vanlig tekst (UTF-8) eller Base64/Base64url, siden noen leverandører lagrer hemmeligheter som Base64. Du kan også lime inn en JWK av typen oct. Hvis hemmeligheten er kortere enn hash-utdataen (32 byte for HS256), merker verktøyet at den er under minimumet i RFC 7518.
  • RS256/384/512, PS256/384/512, ES256/384/512 og EdDSA: lim inn Offentlig nøkkel (PEM eller JWK). Godkjente PEM-blokker er PUBLIC KEY, RSA PUBLIC KEY og CERTIFICATE (nøkkelen leses da fra X.509-sertifikatet). En JWK eller et helt JWK Set fungerer også: nøkkelen hvis kid samsvarer med headeren, brukes. Private nøkler avvises, for en verifiserer trenger aldri en. EdDSA støtter Ed25519 i nettlesere der Web Crypto har det.

Verifiseringen bruker nettleserens Web Crypto API. Resultatet «Ugyldig signatur» betyr at nøkkelen er feil eller at tokenen er endret. Husk at algoritmen hentes fra token-headeren: en ekte server må i stedet fastsette forventet algoritme i konfigurasjonen, ellers kan en angriper velge den selv.

Sikkerhetsmerknader

  • Tokens er legitimasjon. Den som har en gyldig tilgangstoken, kan som regel opptre som eieren helt til den utløper. Dette verktøyet dekoder og verifiserer alt i nettleseren din og sender verken tokenen eller nøkkelen noe sted. Likevel bør du unngå å lime inn tokens fra produksjon i verktøy du ikke kan inspisere.
  • alg: none betyr at tokenen er usignert. Hvem som helst kan forfalske en, og en server må avvise den. Verktøyet viser en advarsel og nekter å «verifisere» en slik token.
  • Klokkesjekkene her bruker klokken på datamaskinen din uten noen toleranse. Servere tillater ofte et minutt eller to med klokkeavvik.
  • JWT-datoer (NumericDate) er sekunder siden 1. januar 1970 UTC. En verdi med 13 sifre er trolig i millisekunder, noe som er en vanlig feil.

Ofte stilte spørsmål

Kan verktøyet si om en token er gyldig?

Det kan si om signaturen samsvarer med en nøkkel du oppgir, og om exp og nbf er oppfylt akkurat nå. Om tokenen blir godtatt, avhenger også av kontroller som bare serveren kjenner til: forventet utsteder (iss), mottaker (aud), algoritme og tilbakekalling.

Hvorfor mislykkes verifiseringen med riktig hemmelighet?

Sjekk Format på hemmeligheten: en Base64-hemmelighet skrevet inn som tekst gir en annen nøkkel. Pass også på at det ikke er lagt til mellomrom eller linjeskift i hemmeligheten, siden HMAC-nøkler sammenlignes byte for byte.

Hva er forskjellen på RS256, PS256 og ES256?

Alle tre er signaturer med offentlig nøkkel og SHA-256. RS256 bruker RSA med PKCS#1 v1.5-polstring, PS256 bruker RSA med PSS-polstring, og ES256 bruker ECDSA på P-256-kurven, som gir mye kortere signaturer.

Hvor finner jeg den offentlige nøkkelen til en leverandør?

Identitetsleverandører publiserer et JWKS (JSON Web Key Set), vanligvis lenket fra /.well-known/openid-configuration under jwks_uri. Åpne det selv og lim inn JSON-en her. Verktøyet velger nøkkelen på kid og henter aldri noe selv.

Er det trygt å lime inn tokenen min her?

Tokenen blir på enheten din: dekoding og verifisering skjer lokalt, og ingenting lastes opp. Vil du være ekstra forsiktig, kan du bruke en utløpt token eller en testtoken når du bare trenger å se strukturen.