Kas yra šis įrankis?
JWT (JSON Web Token) yra kompaktiška, URL saugi eilutė, naudojama reikalavimams pernešti tarp dviejų šalių – dažniausiai kaip autentifikacijos žetonas po prisijungimo. Jį sudaro trys tašku atskirtos dalys: antraštė (algoritmas ir žetono tipas), krovinys (tikrieji reikalavimai – vartotojo ID, vaidmenys, galiojimo pabaiga ir kt.) ir parašas (naudojamas serverio patikrinti, ar žetonas nebuvo pakeistas).
Antraštė ir krovinys yra tiesiog Base64URL koduotas JSON – ne šifruotas – tad bet kas gali juos dekoduoti ir perskaityti be slapto rakto. Tik parašui reikia slapto rakto tikrinimui. Būtent tai šis įrankis daro: dekoduoja skaitomas dalis ir rodo jas kaip suformatuotą JSON, nebandydamas patikrinti parašo.
JWT standartizuoti RFC 7519, o parašo sluoksnis (JWS) apibrėžtas atskirai RFC 7515 – naudingos nuorodos, kai jums reikia oficialaus registruotų reikalavimų sąrašo, kaip exp, iat, sub ir aud.
Kodėl jį naudoti?
- Iš karto skaitoma antraštė ir krovinys, suformatuoti kaip JSON – nebereikia rankiniu būdu skaidyti eilutės ir dekoduoti Base64 rankomis.
- Automatinis galiojimo pabaigos tikrinimas: jei krovinys turi „exp" reikalavimą, jis konvertuojamas į skaitomą datą ir pažymimas kaip pasibaigęs ar galiojantis.
- Vieno paspaudimo kopijavimas antraštei ar kroviniui atskirai.
- 100% vietinis apdorojimas – žetonas dekoduojamas vietoje ir niekada nesiunčiamas, saugu naudoti net su žetonais iš produkcinės sistemos.
- Jokio parašo tikrinimo neatliekama ar teigiama – tai derinimo/tikrinimo įrankis, ne validatorius.
Kaip naudoti
- Įklijuokite savo JWT į langelį (pilną eilutę, įskaitant visas tris tašku atskirtas dalis).
- Antraštė ir krovinys dekoduojami automatiškai rašant.
- Patikrinkite galiojimo pabaigos eilutę, jei žetonas turi „exp" reikalavimą – ji rodo tikslią datą ir ar žetonas jau pasibaigęs.
- Spustelėkite „Kopijuoti" po bet kuriuo langeliu, kad nukopijuotumėte tą skyrių kaip JSON.
Pavyzdys
Įvestis
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0IiwibmFtZSI6IkpvaG4gRG9lIiwiZXhwIjoxNzAwMDAwMDAwfQ.dQw4w9WgXcQIšvestis
Antraštė: {"alg": "HS256"}
Krovinys: {"sub": "1234", "name": "John Doe", "exp": 1700000000}Parašas (trečia dalis) niekada nedekoduojamas ar tikrinamas – tai neskaidri maiša, naudojama serverio pusėje autentiškumui patikrinti.
Praktiniai patarimai
- Derinate „neteisingo žetono" klaidas: pirmiausia dekoduokite krovinį, kad patikrintumėte „exp" reikalavimą – pasibaigęs žetonas yra dažniausia priežastis, ir tai ne visada akivaizdu vien iš klaidos pranešimo.
- Tikrinate, ką iš tikrųjų turi trečiosios šalies API žetonas: daug API grąžina neskaidriai atrodantį JWT kaip prieigos žetoną – dekoduokite jį čia, kad pamatytumėte apimtis, vartotojo ID ar galiojimo pabaigą, kurią iš tikrųjų gauna jūsų integracija.
- Niekada nemanykite, kad JWT šifruotas: jei kūrimo metu dekoduotame krovinyje matote jautrius duomenis (el. paštą, vidinius ID), tai signalas perkelti tuos duomenis į serverio pusę, o ne pasitikėti, kad klientas jų neskaitys.
Dažni reikalavimai, kuriuos pamatysite kroviniame
| Reikalavimas | Reikšmė |
|---|---|
| sub | Subjektas – paprastai vartotojo ID, kurį atstovauja žetonas |
| exp | Galiojimo pabaigos laikas (Unix laiko žyma) – žetonas negalioja po šio laiko |
| iat | Išduota (issued at) – kada žetonas buvo sukurtas |
| iss | Išdavėjas – kuri paslauga/serveris išdavė žetoną |
| aud | Auditorija – kuriai paslaugai skirtas žetonas |
| role / roles / scope | Individualūs reikalavimai – teisės ar vaidmenys, suteikti vartotojui (nėra JWT standarto dalis, bet ypač dažni) |
Dažniausiai užduodami klausimai
Ar šis įrankis tikrina JWT parašą?
Ne. Parašo tikrinimui reikia slapto ar viešo rakto, naudojamo žetonui pasirašyti, kurį turi tik išduodantis serveris. Šis įrankis tik dekoduoja antraštę ir krovinį – žmogui skaitomas dalis – tad galite patikrinti reikalavimus ir galiojimo pabaigą be jokio rakto.
Ar saugu čia įklijuoti tikrą produkcinį JWT?
Dekodavimas vyksta visiškai jūsų naršyklėje per „JavaScript" – žetonas niekada nesiunčiamas į jokį serverį, įskaitant mūsų. Vis dėlto elkitės su žetonais kaip su slaptažodžiais: neįklijuokite jų į įrankius, kuriais nepasitikite, ir venkite dalintis dekoduotų žetonų nuotraukomis, kurie turi jautrių reikalavimų.
Kodėl bet kas gali perskaityti mano JWT krovinį be slaptažodžio?
Pagal dizainą – JWT antraštė ir krovinys yra Base64URL koduoti, ne šifruoti. Kodavimas nėra saugumas; jis tiesiog padaro JSON saugų URL perdavimui. Niekada nedėkite paslapčių (slaptažodžių, kreditinės kortelės numerių) tiesiogiai JWT krovinyje – manykite, kad bet kas, turintis žetoną, gali perskaityti jo turinį.
Ką reiškia „exp" reikalavimas ir kodėl jis svarbus?
„exp" yra žetono galiojimo pabaigos laikas, kaip Unix laiko žyma (sekundės nuo 1970 m.). Serveriai atmeta JWT, kai šis laikas praeina, priversdami klientą iš naujo autentifikuotis. Šis įrankis konvertuoja jį į skaitomą datą ir pažymi, ar jis jau pasibaigęs, kas naudinga derinant „kodėl mano sesija atsijungė" problemas.
Mano žetonas rodo JSON perpynimo klaidą – kodėl?
Arba eilutė nėra tinkamas JWT (turėtų būti lygiai trys tašku atskirtos dalys), arba ji buvo sutrumpinta ar pakeista – dažna priežastis yra žetonas, atsitiktinai išskaidytas per kelias eilutes ar prarandantis galinius simbolius kopijuojant.