Slik bruker du verktøyet
- Lim inn hele tokenet: tre Base64URL-deler atskilt med punktum.
- Les den dekodede headeren og payloaden. Claimene exp, iat og nbf vises som datoer, med en advarsel hvis tokenet er utløpt eller ikke gyldig ennå.
- For å verifisere signaturen skriver du inn den delte hemmelige nøkkelen for HS256, HS384 eller HS512, eller limer inn den offentlige nøkkelen i PEM-format for RS-, PS- eller ES-algoritmer.
- Kontroller at claimene for utsteder, mottaker og subjekt samsvarer med det applikasjonen din forventer.
Slik er et JWT bygd opp
Et JSON Web Token (RFC 7519) har tre deler atskilt med punktum: header.payload.signature. Header og payload er JSON-objekter kodet som Base64URL uten utfylling. Derfor begynner tokener nesten alltid med eyJ, den kodede formen av en innledende {". Signaturen beregnes over de to første delene nøyaktig slik de står i tokenet.
- Header: signeringsalgoritmen i
alg, vanligvis"typ": "JWT", og ofte enkidsom angir nøkkelen. - Payload (nyttelast): claimene (påstandene), for eksempel hvem brukeren er, hvem som utstedte tokenet og når det utløper.
- Signatur: en HMAC-, RSA- eller ECDSA-signatur som beviser at header og payload ikke er endret.
Et token med fem deler er en kryptert JWE. Innholdet kan ikke leses uten dekrypteringsnøkkelen.
Registrerte claims
| Claim | Navn | Betydning |
|---|---|---|
iss | Utsteder (issuer) | Hvem som opprettet og signerte tokenet |
sub | Subjekt (subject) | Hvem tokenet gjelder, vanligvis en bruker-ID |
aud | Mottaker (audience) | Tjenesten tokenet er ment for |
exp | Utløpstid (expiration time) | Etter dette tidspunktet må tokenet avvises |
nbf | Ikke før (not before) | Før dette tidspunktet må tokenet avvises |
iat | Utstedt (issued at) | Når tokenet ble opprettet |
jti | JWT-ID | Unik identifikator som brukes til å oppdage gjenbruk (replay) |
Tidspunktene er NumericDate-verdier: sekunder siden 1. januar 1970 UTC, ikke millisekunder. Dekoderen viser dem som lesbare datoer og sammenligner dem med klokken på enheten din.
Dekoding er ikke verifisering
Hvem som helst kan dekode et JWT, fordi payloaden bare er kodet, ikke kryptert. Legg derfor aldri passord eller andre hemmeligheter i den. Tillit får du bare ved å kontrollere signaturen med riktig nøkkel, og en server som tar imot tokener, bør dessuten:
- bare tillate algoritmen den forventer, og avvise
"alg": "none", som markerer et usignert token; - aldri la tokenets header velge mellom HMAC og RSA, ellers kan en angriper signere et forfalsket token med den offentlige nøkkelen din brukt som HMAC-hemmelighet;
- kontrollere
exp,nbf,issogaudved hver forespørsel.
Den valgfrie verifiseringen på denne siden bruker Web Crypto API, som er innebygd i nettleseren din. Dekoding og verifisering skjer på enheten din, og ingenting lastes opp. Som en generell regel bør du aldri lime inn signeringsnøkler fra produksjon eller aktive tokener på nettsteder du ikke stoler på.
Ofte stilte spørsmål
Er det trygt å lime inn et JWT i denne dekoderen?
Tokenet dekodes og verifiseres av JavaScript i nettleseren din og sendes aldri til noen server. Husk likevel at et token som ikke er utløpt, fungerer som et passord for den som har det. Bruk derfor helst testtokener eller utløpte tokener når du deler skjermbilder eller logger.
Kan jeg dekode et JWT uten den hemmelige nøkkelen?
Ja. Header og payload er vanlig Base64URL-kodet JSON, så de kan leses uten noen nøkkel. Den hemmelige eller offentlige nøkkelen trengs bare for å verifisere signaturen.
Hvorfor sier dekoderen at tokenet mitt er utløpt?
exp ligger før gjeldende tidspunkt på enheten din. Hvis tokenet fortsatt skulle vært gyldig, bør du sjekke systemklokken og levetiden for tokenet som utstederen har konfigurert.Hvilke signaturalgoritmer kan verifiseres?
HS256, HS384 og HS512 med en delt hemmelig nøkkel, og RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384 og ES512 med en offentlig nøkkel i PEM-format.
Hva betyr "alg": "none"?
Det markerer et usikret JWT med tom signatur, definert i RFC 7518. Hvem som helst kan opprette eller endre et slikt token, så en server som forventer signerte tokener, må alltid avvise det.