JSON Web Tokenin rakenne ja toimintaperiaate
JSON Web Token (JWT) on tiivis ja itsenäinen tapa siirtää tietoa osapuolten välillä JSON-muodossa. Tunniste koostuu kolmesta pisteellä (.) erotetusta osasta: otsikosta (header), hyötykuormasta (payload) ja allekirjoituksesta (signature). Rakenne noudattaa muotoa otsikko.hyötykuorma.allekirjoitus.
Jokainen näistä kolmesta osasta koodataan erikseen Base64URL-muotoon. Base64URL on muunnelma perinteisestä Base64-koodauksesta, jossa URL-osoitteille varatut merkit, kuten plus (+) ja vinoviiva (/), on korvattu tavuviivalla (-) ja alaviivalla (_), ja täytemerkit (=) on jätetty pois. Tämä mahdollistaa tunnisteen turvallisen välittämisen HTTP-otsikoissa ja URL-osoitteissa ilman erillistä koodausta.
Otsikon ja hyötykuorman sisältö
JWT-tunnisteen ensimmäinen osa on otsikko, joka määrittelee tunnisteen käsittelyyn liittyvät metatiedot. Tyypillisesti otsikko sisältää kaksi keskeistä tietoa eli claimia:
alg: Käytettävä allekirjoitusalgoritmi, kuten HS256 (HMAC käyttäen SHA-256-tiivistettä) tai RS256 (RSA käyttäen SHA-256-tiivistettä).typ: Tunnisteen tyyppi, joka on yleensä JWT.
Toinen osa on hyötykuorma, joka sisältää varsinaisen siirrettävän tiedon eli väitteet (claims). Väitteet jaetaan rekisteröityihin, julkisiin ja yksityisiin claims-tietoihin. Rekisteröidyt väitteet ovat suositeltuja, ennalta määritettyjä kenttiä, jotka helpottavat yhteensopivuutta:
iat(Issued At): Ajankohta, jona tunniste on myönnetty. Ilmoitetaan Unix-aikaleimana sekunteina.exp(Expiration Time): Ajankohta, jona tunnisteen voimassaolo päättyy. Tämän jälkeen tunnistetta ei tule enää hyväksyä.
Dekoodauksen ja allekirjoituksen varmistamisen ero
On kriittistä ymmärtää ero JWT-tunnisteen dekoodauksen ja sen allekirjoituksen todentamisen välillä.
Dekoodaus on pelkkää Base64URL-muotoisen tekstin kääntämistä takaisin selkokieliseksi JSON-rakenteeksi. Kuka tahansa, jolla on pääsy tunnisteeseen, voi dekoodata sen ja lukea sen sisältämät tiedot. Dekoodaus ei vaadi salasanoja, avaimia tai allekirjoituksen tarkistamista.
Allekirjoituksen varmistaminen puolestaan takaa sen, että tunnisteen sisältöön ei ole kajottu sen myöntämisen jälkeen. Allekirjoitus luodaan koodatun otsikon, koodatun hyötykuorman ja salaisen avaimen tai julkisen avaimen avulla. Jos hyötykuormaa muutetaan, allekirjoitus ei enää täsmää, ja vastaanottaja havaitsee muokkauksen. Jos allekirjoitusta ei varmisteta sovelluksessa, järjestelmä on altis hyökkäyksille, joissa hyötykuorman tietoja (kuten käyttäjärooleja) on muokattu.
JWT-dekooderin säännöt ja virhetilanteet
Tämä työkalu on suunniteltu JWT-tunnisteiden nopeaan tarkasteluun suoraan selaimessa. Työkalu analysoi syötettä reaaliaikaisesti ja noudattaa seuraavia sääntöjä virhetilanteissa:
- Tyhjä syöte: Jos syötekenttä on tyhjä, työkalu pysyy tilassa Valmis. Liitä JWT-tunniste dekoodataksesi sen..
- Rakennevirhe: Jos syötteestä puuttuu pisteitä tai se ei koostu kolmesta osasta, työkalu näyttää virheen Virheellinen JWT – odotettiin kolmea pisteellä erotettua osaa..
- Base64URL-virhe otsikossa: Jos ensimmäistä osaa ei voida purkaa, näytetään virheilmoitus Otsikon dekoodaus epäonnistui – virheellinen Base64URL-muoto..
- Base64URL-virhe hyötykuormassa: Jos toista osaa ei voida purkaa, näytetään virheilmoitus Hyötykuorman dekoodaus epäonnistui – virheellinen Base64URL-muoto..
- JSON-virhe otsikossa: Jos purettu otsikko ei ole oikein muotoiltua JSON-dataa, virheenä on Otsikko ei ole kelvollista JSON-dataa..
- JSON-virhe hyötykuormassa: Jos purettu hyötykuorma ei ole oikein muotoiltua JSON-dataa, virheenä on Hyötykuorma ei ole kelvollista JSON-dataa..
- Pituusrajoitus: Jos syötetty merkkijono on liian pitkä, työkalu ilmoittaa Tämä on liian pitkä ollakseen todellinen JWT-tunniste..
Kun syötteessä havaitaan virhe, dekoodatut alueet piilotetaan näkyvistä. Kun syöte tyhjennetään painamalla Tyhjennä, kohdistus palautuu automaattisesti syötekenttään.
Tietojen tulkinta ja tilamerkit
Kun kelvollinen JWT-tunniste syötetään työkaluun, se purkaa ja näyttää seuraavat tiedot:
| Kenttä | Kuvaus |
|---|---|
| Otsikko (Header) | Dekoodattu otsikko JSON-muodossa. |
| Hyötykuorma (Payload) | Dekoodattu hyötykuorma JSON-muodossa. |
| Algoritmi | Otsikosta tunnistettu allekirjoitusalgoritmi. |
| Tyyppi | Otsikosta tunnistettu tunnisteen tyyppi. |
| Myönnetty ajankohtana | Hyötykuorman iat-kentästä purettu aika. |
| Vanhentuu | Hyötykuorman exp-kentästä purettu aika. |
| Merkkiä | Syötetyn JWT-tunnisteen kokonaispituus merkkeinä. |
Työkalu määrittää tunnisteen tilan exp-kentän perusteella ja näyttää jonkin seuraavista tilamerkeistä:
- Kelvollinen: Tunnisteen vanhenemisaika on tulevaisuudessa.
- Vanhentunut: Tunnisteen vanhenemisaika on jo ohitettu.
- Ei vielä kelvollinen: Tunnisteen voimassaoloaika ei ole vielä alkanut.
- Ei vanhenemisaikaa: Tunnisteesta puuttuu
exp-vaatimus.
Työkalun yhteydessä näytetään huomautus Tämä tarkistaa vain exp-vaatimuksen — se ei varmista allekirjoitusta, julkaisijaa tai vastaanottajaa..
Tietosuoja ja käsittely
Tunnisteesi dekoodataan selaimessasi. Mitään ei ladata BroBroGo-palveluun. Kaikki käsittely tapahtuu paikallisesti käyttäjän omalla laitteella, joten tunnisteen sisältämät tiedot eivät siirry verkon yli ulkopuolisille palvelimille.
Usein kysytyt kysymykset
Onko JWT-tunnisteen liittäminen tähän turvallista?
Kyllä. Dekoodaus tapahtuu kokonaan selaimessasi – tunnistettasi ei koskaan lähetetä BroBroGo-palveluun.
Vahvistaako tämä työkalu allekirjoituksen?
Ei. Työkalu vain dekoodaa otsikon (header) ja hyötykuorman (payload) luettavaan muotoon. Allekirjoituksen todentamiseen tarvittaisiin salaisuus tai julkinen avain, joita tämä työkalu ei koskaan kysy.
Mistä tiedän, onko tunnisteeni vanhentunut?
Dekooderi lukee exp-kentän (claim) ja näyttää tilamerkin – kelvollinen, vanhentunut, ei vielä kelvollinen tai ei vanhenemisaikaa – dekoodatun tunnisteen vieressä.