CodeKitHub
Kodēšanas rīki

JWT dekodētājs

Pēdējoreiz atjaunināts:

Ielīmē jebkuru JWT (JSON Web Token) un uzreiz redzi tā galveni un lietderīgo slodzi dekodētu un formatētu — tostarp to, vai derīguma termiņš ir beidzies. Viss notiek tavā pārlūkā: tokens nekad netiek nekur nosūtīts, un netiek veikta paraksta pārbaude (šis rīks tikai dekodē, tas nepārbauda, vai tokens ir īsts).

Header

Payload

Decoded entirely in your browser — no signature verification, and the token is never sent anywhere.

Kas ir šis rīks?

JWT (JSON Web Token) ir kompakta, URL droša virkne, ko izmanto prasību (claims) pārsūtīšanai starp divām pusēm — visbiežāk kā autentifikācijas tokenu pēc pieteikšanās. Tam ir trīs ar punktiem atdalītas daļas: galvene (algoritms un tokena tips), lietderīgā slodze (faktiskās prasības — lietotāja ID, lomas, derīguma termiņš utt.) un paraksts (ko serveris izmanto, lai pārbaudītu, ka tokens nav mainīts).

Galvene un lietderīgā slodze ir vienkārši Base64URL kodēts JSON — nevis šifrēts —, tāpēc ikviens tos var dekodēt un lasīt bez slepenās atslēgas. Tikai parakstam ir nepieciešama atslēga, lai to pārbaudītu. Tieši to dara šis rīks: dekodē lasāmās daļas un rāda tās kā formatētu JSON, nemēģinot pārbaudīt parakstu.

JWT ir standartizēts RFC 7519, ar paraksta slāni (JWS), kas atsevišķi definēts RFC 7515 — noderīgas atsauces, kad vajag autoritatīvu reģistrēto prasību sarakstu, piemēram, exp, iat, sub un aud.

Kāpēc to izmantot?

  • Uzreiz lasāma galvene un lietderīgā slodze, formatēta kā JSON — vairs nav manuāli jāsadala virkne un jādekodē Base64 ar roku.
  • Automātiska derīguma pārbaude: ja lietderīgajā slodzē ir "exp" prasība, tā tiek pārvērsta lasāmā datumā un atzīmēta kā beigusies vai derīga.
  • Vienas klikšķa kopēšana galvenei vai lietderīgajai slodzei atsevišķi.
  • 100% klientā — tokens tiek dekodēts vietēji un nekad netiek pārraidīts, drošs lietošanai pat ar tokeniem no ražošanas sistēmas.
  • Netiek veikta vai apgalvota paraksta pārbaude — šis ir atkļūdošanas/pārbaudes rīks, nevis validators.

Kā to lietot

  1. Ielīmē savu JWT laukā (pilnu virkni, ieskaitot visas trīs ar punktiem atdalītās daļas).
  2. Galvene un lietderīgā slodze automātiski dekodējas, rakstot.
  3. Pārbaudi derīguma rindiņu, ja tokenam ir "exp" prasība — tā rāda precīzu datumu un to, vai tokens ir beidzies.
  4. Nospied "Copy" zem jebkura lauka, lai kopētu šo sadaļu kā JSON.

Piemērs

Ievade

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0IiwibmFtZSI6IkpvaG4gRG9lIiwiZXhwIjoxNzAwMDAwMDAwfQ.dQw4w9WgXcQ

Izvade

Header: {"alg": "HS256"}
Payload: {"sub": "1234", "name": "John Doe", "exp": 1700000000}

Paraksts (trešā daļa) nekad netiek dekodēts vai pārbaudīts — tā ir necaurspīdīga jaucējvērtība, ko izmanto servera pusē autentiskuma pārbaudei.

Praktiski padomi

  • Atkļūdojot "invalid token" kļūdas: vispirms dekodē lietderīgo slodzi, lai pārbaudītu "exp" prasību — beidzies tokens ir visbiežākais cēlonis, un tas ne vienmēr ir acīmredzams no kļūdas ziņojuma vien.
  • Pārbaudot, ko faktiski satur trešās puses API tokens: daudzi API atgriež necaurspīdīgi izskatošu JWT kā piekļuves tokenu — dekodē to šeit, lai redzētu tvērumus, lietotāja ID vai derīguma termiņu, ko tava integrācija faktiski saņem.
  • Nekad nepieņem, ka JWT ir šifrēts: ja izstrādes laikā dekodētajā lietderīgajā slodzē redzi sensitīvus datus (e-pastu, iekšējus ID), tas ir signāls pārvietot šos datus servera pusē, nevis paļauties, ka klients tos nelasīs.

Izplatītas prasības, ko redzēsi lietderīgajā slodzē

PrasībaNozīme
subSubjekts — parasti lietotāja ID, ko tokens pārstāv
expDerīguma termiņš (Unix laikspiedols) — tokens nav derīgs pēc šī brīža
iatIzdošanas laiks — kad tokens tika izveidots
issIzdevējs — kurš serviss/serveris izdeva tokenu
audAuditorija — kuram servisam tokens ir paredzēts
role / roles / scopePielāgotas prasības — lietotājam piešķirtās atļaujas vai lomas (nav JWT standarta daļa, bet ārkārtīgi izplatītas)

Biežāk uzdotie jautājumi

Vai šis rīks pārbauda JWT parakstu?

Nē. Paraksta pārbaudei nepieciešama slepenā vai publiskā atslēga, ar kuru tokens parakstīts, un tā ir tikai izdevušajam serverim. Šis rīks dekodē tikai galveni un lietderīgo slodzi — cilvēkam lasāmās daļas —, lai varētu pārbaudīt prasības un derīguma termiņu bez jebkādas atslēgas.

Vai droši šeit ielīmēt reālu ražošanas JWT?

Dekodēšana notiek pilnībā tavā pārlūkā ar JavaScript — tokens nekad netiek nosūtīts uz jebkādu serveri, ieskaitot mūsējo. Tomēr izturies pret tokeniem kā pret parolēm: neielīmē tos rīkos, kuriem neuzticies, un izvairies no koplietot dekodētu tokenu ekrānuzņēmumus, kas satur sensitīvas prasības.

Kāpēc ikviens var lasīt mana JWT lietderīgo slodzi bez paroles?

Tā ir paredzēts — JWT galvene un lietderīgā slodze ir Base64URL kodētas, nevis šifrētas. Kodēšana nav drošība; tā vienkārši padara JSON drošu pārraidei URL formātā. Nekad neievieto slepenus datus (paroles, kredītkaršu numurus) tieši JWT lietderīgajā slodzē — pieņem, ka ikviens, kam ir tokens, var lasīt tā saturu.

Ko nozīmē "exp" prasība un kāpēc tā ir svarīga?

"exp" ir tokena derīguma termiņa laiks, Unix laikspiedola formātā (sekundes kopš 1970. gada). Serveri noraida JWT, tiklīdz šis laiks ir pagājis, liekot klientam autentificēties atkārtoti. Šis rīks pārvērš to lasāmā datumā un atzīmē, vai tas jau ir beidzies, kas noder, atkļūdojot "kāpēc mana sesija izlogojās" problēmas.

Mans tokens rāda JSON parsēšanas kļūdu — kāpēc?

Vai nu virkne nav derīgs JWT (jābūt tieši trim ar punktiem atdalītām daļām), vai tā ir apcirsta vai mainīta — izplatīts iemesls ir tokens, kas nejauši sadalīts vairākās rindās vai kam trūkst beigu rakstzīmju, kopējot.

Saistītie rīki