Mitä JWT-purkaja oikeastaan tekee
JSON Web Token (JWT) näyttää pitkältä, läpinäkymättömältä satunnaismerkkijonolta, mutta se ei ole salattu eikä salainen sala. Se on kompakti, URL-turvallinen säiliö, joka kuljettaa jäsenneltyä dataa kahden osapuolen välillä. Liitä token yllä olevaan purkajaan, ja se hajottaa merkkijonon osiinsa ja näyttää sisällä olevan todellisen JSON:in — metadatan, vaateet (claims), kenelle token on tarkoitettu ja milloin se vanhenee. Kaikki tapahtuu suoraan selaimessasi. Tokenia ei koskaan ladata, lokiteta tai lähetetä minnekään, mikä on tärkeää silloin, kun tarkastelemasi asia on aktiivinen istuntotunniste.

Kolme osaa, kaksi pistettä
Jokainen hyvin muodostettu JWT on kolme Base64url-koodattua merkkijonoa pisteillä yhdistettynä: header.payload.signature. Juuri tuo yksittäinen pistemerkki kertoo jäsentäjille, mistä yksi osio päättyy ja seuraava alkaa, ja siksi token, jossa on väärä määrä pisteitä, hylätään ennen kuin mitään edes luetaan.
Otsikko (header) on pieni JSON-olio, joka kuvaa itse tokenia. Se sisältää lähes aina kentän typ (tyyppi, yleensä JWT) ja alg — allekirjoitusalgoritmin, kuten HS256 (HMAC SHA-256:lla) tai RS256 (RSA SHA-256:lla). Otsikko kertoo varmentajalle täsmälleen, miten allekirjoitus tuotettiin.
Hyötykuorma (payload) on osa, josta useimmat välittävät eniten. Se on toinen JSON-olio, joka sisältää vaateet (claims) — väittämiä käyttäjästä ja tokenista. Määrittely jakaa vaateet rekisteröityihin (standardi, varatut nimet), julkisiin ja yksityisiin (mukautetut nimet, jotka keksit omaa sovellustasi varten). Hyötykuorman purkaminen paljastaa, kuka on kirjautuneena, mikä rooli hänellä on ja milloin hänen istuntonsa päättyy.
Allekirjoitus (signature) on kryptografinen sinetti. Se lasketaan koodatun otsikon ja hyötykuorman yli käyttäen otsikossa mainittua algoritmia sekä salaista tai yksityistä avainta. Koska se kattaa molemmat muut osiot, mikä tahansa muutos otsikossa tai hyötykuormassa — jopa yksi ainoa merkki — mitätöi sen.
Vaateet, joita näet useimmin
Rekisteröidyt vaateet ovat lyhyitä, kolmikirjaimisia nimiä, jotka RFC 7519 määrittelee, jotta eri järjestelmät voivat toimia yhteen. Kourallinen niistä näkyy lähes kaikkialla:
iss— issuer: kuka myönsi tokenin (tunnistuspalvelimesi tai identiteetintarjoajasi).sub— subject: pääkohde, jota token koskee, tyypillisesti pysyvä käyttäjätunnus.aud— audience: vastaanottaja, jolle token on tarkoitettu. API:n tulisi hylätä tokenit, joiden kohdeyleisö ei ole se itse.exp— expiration time: Unix-aikaleima, jonka jälkeen tokenia ei saa enää hyväksyä.iat— issued at: Unix-aikaleima, jolloin token luotiin.
Voit törmätä myös kenttiin nbf (not before) ja jti (yksilöllinen tokentunnus). Aikaleimat ovat sekunteja vuodesta 1970 UTC-aikana, minkä vuoksi purkaja, joka esittää ne ihmisen luettavina päivämäärinä, säästää sinut päänvaivalta tarkistaa, onko token jo vanhentunut.
Purkaminen ei ole varmentamista — tämä on kohta, joka pistää monia
Tämä ero on tärkein yksittäinen asia ymmärtää JWT:istä. Purkaminen tarkoittaa sisällön lukemista: se ei vaadi avainta, ja kuka tahansa tokenin haltija voi tehdä sen, koska Base64url on koodaus, ei salaus. Varmentaminen tarkoittaa sen todistamista, että token on aito ja koskematon — laskemalla allekirjoitus uudelleen oikealla salaisella tai julkisella avaimella ja vahvistamalla, että se täsmää.
Tämä työkalu purkaa. Se näyttää, mitä token sanoo, ei sitä, onko token luotettava. Token voi olla väärennetty, vanhentunut tai uudelleen toistettu ja silti purkautua täysin siistiltä näyttäväksi JSON:iksi. Älä koskaan tee käyttöoikeuspäätöstä pelkkien purettujen vaateiden perusteella. Tuotannossa varmennat allekirjoituksen palvelinpuolella, tarkistat kentän exp, ja vahvistat, että iss ja aud vastaavat odottamaasi — käyttäen testattua kirjastoa, et koskaan käsin kirjoitettua merkkijonovertailua.

Hyötykuorma ei ole holvi
Koska hyötykuorma on vain Base64url-koodattu, kuka tahansa tokenin siepannut voi lukea sen. Kohtele kaikkea sen sisällä julkisena. Älä laita salasanoja, täysiä luottokorttinumeroita, salaisia avaimia tai mitään arkaluontoista henkilötietoa JWT-vaateisiin — jos sinä voit purkaa sen tässä yhdellä klikkauksella, niin voi kuka tahansa muukin kopion saanut. Allekirjoitus suojaa muokkaukselta, ei koskaan lukemiselta. Jos aidosti tarvitset piilottaa hyötykuorman sisällön, se on JWE:n (salattujen tokenien) tehtävä, joka on kokonaan eri määrittely.
Yksityisyys ja liittyvät työkalut
Tokenin tarkastaminen on arkaluontoinen teko, joten tämä purkaja toimii kokonaan asiakaspuolella — jäsennys on pelkkää JavaScriptiä välilehdelläsi eikä mikään poistu koneeltasi. Istuntotokenin liittäminen palvelinpohjaiseen työkaluun tarkoittaisi aktiivisen tunnistetiedon luovuttamista kolmannelle osapuolelle, mikä on juuri sitä, mitä kannattaa välttää. Itse koodauksen taustalla katso Base64-työkaluamme, ja tutustu muihin kehittäjätyökaluihimme löytääksesi lisää laitteella toimivia apuvälineitä.
Usein kysytyt kysymykset
Onko JWT salattu?
Ei. Tavallinen JWT on Base64url-koodattu, ei salattu. Kuka tahansa tokenin haltija voi lukea otsikon ja hyötykuorman. Käytä JWE:tä, jos tarvitset sisällön piilotettavaksi.
Varmentaako tämä työkalu allekirjoituksen?
Ei. Se vain purkaa ja näyttää otsikon ja hyötykuorman. Allekirjoituksen varmentaminen vaatii myöntäjän salaisen tai julkisen avaimen, ja se tulisi tehdä palvelimellasi.
Onko tokenini liittäminen tänne turvallista?
Kyllä. Purku tapahtuu kokonaan selaimessasi paikallisen JavaScriptin avulla. Tokenia ei koskaan ladata, tallenneta tai lähetetä millekään palvelimelle.
Mitä iss, sub, aud, exp ja iat tarkoittavat?
Ne ovat rekisteröityjä vaateita: myöntäjä, kohde, yleisö, vanhenemisaika ja myöntämisaika. Kolme aikaan liittyvää käyttävät Unix-aikaleimoja sekunteina.
Voinko luottaa purkamisen jälkeen näytettyihin vaateisiin?
Ei pelkästään niiden perusteella. Puretut vaateet voivat olla peräisin väärennetystä tai vanhentuneesta tokenista. Varmenna aina allekirjoitus ja tarkista vanheneminen palvelinpuolella ennen kuin luotat niihin.
Miksi tokenissani on kolme pisteillä eroteltua osaa?
Ne ovat otsikko, hyötykuorma ja allekirjoitus, kukin Base64url-koodattu ja yhdistetty pisteillä. Pisteet kertovat jäsentäjille, mistä kukin osio alkaa ja päättyy.
