Без качване, 100% локално, без акаунт

Урок

Как да декодирате JWT, без да го изтичате

Един JSON Web Token носи реални данни: на кой потребител е издаден, какви права дава, кога изтича. Поставянето му в случаен онлайн декодер означава да предадете тези данни, а често и все още валидна сесия, на сървър, който не контролирате. Декодерът по-долу работи изцяло в браузъра ви, така че можете да прочетете какво има вътре в token, да проверите дали е изтекъл и да потвърдите HMAC подпис, когато знаете тайната, и всичко това без нито една мрежова заявка да напусне раздела ви.

Стъпка по стъпка

  1. Отворете JWT декодера и поставете своя token в полето за въвеждане. Един JWT се състои от три Base64Url части, свързани с точки: header, payload и подпис. Можете да го поставите с префикса Bearer или без него; инструментът чете структурата и в двата случая и веднага ви съобщава, ако форматът е грешен.
  2. Прочетете декодираните header и payload. Header показва алгоритъма на подписване (например HS256 или RS256) и идентификатора на ключа, когато присъства. Payload изброява claims: за кого е token (sub), кой го е издал (iss) и времевите печати. Инструментът превръща числовите полета iat, nbf и exp в четими дати и отбелязва дали token все още е валиден, или вече е изтекъл.
    Декодиран JWT, показващ алгоритъма в header и claims в payload с четими дати на издаване и изтичане
  3. Ако token използва HS256 и разполагате със споделената тайна, поставете тайната в полето за проверка и щракнете върху Потвърди. Инструментът преизчислява HMAC върху header и payload и го сравнява с подписа, така че да разберете дали token е истински, или е бил подправен. За token от тип RS256 или ES256 подписването става с частен ключ, който нямате, затова инструментът проверява claims, но не твърди, че потвърждава подписа.
    Полето за HMAC проверка, попълнено със споделената тайна, и значка за валиден подпис за token с HS256

Защо никога не бива да поставяте token в случаен сайт

Един JWT не е криптиран. Header и payload са само Base64Url-кодирани, което означава, че всеки, който получи token, може да прочете всеки claim в него: имейл, потребителски идентификатор, роли, вътрешни флагове. Ако token е access token, който не е изтекъл, всеки, който го държи, може да го възпроизведе отново и да действа от ваше име, докато той изтече. Когато поставите жив token в хостван декодер, изпращате всичко това в логовете на онзи сървър. Декодирането на token на собствената ви машина, без качване, е единственият начин да го проверите, без да разширявате кръга от хора, които могат да го видят. Можете да се уверите, че няма никакъв трафик, като отворите панела за мрежата, докато декодирате.

Какво може и какво не може да ви каже подписът

Подписът е това, което пречи на някого да промени claims и да му се размине. За token с HS256 една и съща тайна подписва и потвърждава, така че ако знаете тайната, можете напълно да потвърдите тук, че token е автентичен. За token с RS256 и ES256 частен ключ подписва token и само съответстващият публичен ключ го потвърждава; частният ключ никога не напуска издателя, така че инструмент от страна на клиента може да прочете claims, но не може честно да докаже подписа без този публичен ключ. Третирайте декодирания payload като твърдение, направено от издателя, а не като доказателство, докато подписът не бъде проверен от онзи, който притежава ключа за проверка. За да хеширате или сравнявате тайни отделно, генераторът на хешове на този сайт също работи локално.

Структура на JWT и какво разкрива всяка част

JWT се състои от три Base64url-кодирани сегмента, разделени с точки: заглавие, полезен товар и подпис. Заглавието декларира типа на токена ("JWT") и алгоритъма: HS256 (HMAC-SHA-256, споделена тайна) или RS256 (RSA-SHA-256, двойка публичен/частен ключ) са най-честите. Полезният товар носи твърдения като `sub` (субект, обикновено потребителски ID), `iat` (Unix времево клеймо на издаване), `exp` (Unix времево клеймо на изтичане), `aud` (предвидена аудитория) и персонализирани твърдения на приложения като роли или области. Base64url не е шифриране: това е URL-безопасен вариант на Base64, който замества `+` с `-` и `/` с `_`, и пропуска запълването. Всеки, притежаващ суровия токен низ, може да декодира заглавието и полезния товар без ключа за подписване. Само сегментът с подписа изисква ключа за проверка. Ето защо поставянето на жив производствен токен в външен онлайн декодер е риск за сигурността: ако `exp` на токена е все още в бъдещето и услугата регистрира входа, сесията, която той представлява, може да бъде компрометирана.

Инструментите, използвани в това ръководство

Често задавани въпроси

Изпраща ли се моят token до някакъв сървър, когато го декодирам?

Не. Декодерът разделя token, Base64Url-декодира header и payload и ги показва в паметта. Незадължителната проверка на HMAC използва вградения Web Crypto API на браузъра ви. Нищо не пътува по мрежата, което има значение, защото един JWT често съдържа лични данни и сесия, която все още е активна. Отворете панела за мрежата на браузъра си, докато декодирате, и ще видите, че не излиза никаква заявка.

Може ли този инструмент да потвърди подпис RS256 или ES256?

Не напълно и няма да се прави, че може. HS256 използва една споделена тайна както за подписване, така и за проверка, така че поставянето на тази тайна позволява на инструмента да потвърди подписа в браузъра ви. RS256 и ES256 използват частен ключ за подписване и отделен публичен ключ за проверка; инструментът чете и валидира claims и срока на валидност, но не стига дотам да твърди подпис, който не може да провери. За тези token потвърдете подписа в услугата, която държи публичния ключ.

Източници