Отправляется ли мой JWT на сервер?+−
Нет. Декодирование полностью происходит в вашем браузере с помощью веб-API atob и TextDecoder - токен, а также любой секрет или открытый ключ, вставленный для проверки подписи, никогда не покидают ваше устройство.
Может ли этот инструмент проверить подпись?+−
Да, как бонус "по возможности". Если вы знаете секрет HMAC (для HS256/384/512) или вставите открытый ключ в формате PEM (для RS256/384/512 или ES256/384/512), инструмент проверит подпись локально с помощью Web Crypto API браузера. Без ключа декодируются и показываются только заголовок и payload - само декодирование никогда не требует ключа подписи.
Почему алгоритм указан как "none"?+−
"alg": "none" означает, что токен вообще не подписан - кто угодно мог записать в него любые claim'ы. Некоторые библиотеки исторически принимали такие неподписанные токены как валидные, что стало известным способом обхода аутентификации. Этот инструмент всегда заметно отмечает это, чтобы вы не пропустили.
Что означают exp, iat и nbf?+−
Это стандартные claim'ы времени из RFC 7519: iat указывает, когда токен был выдан, nbf - самый ранний момент, когда он становится действительным, а exp - когда он перестаёт быть таковым. Все три хранятся как NumericDate - количество секунд с начала эпохи Unix - которое этот инструмент преобразует в читаемую дату и относительное время вроде "истекает через 2 часа".
Почему я могу прочитать payload без секрета?+−
Потому что заголовок и payload JWT только закодированы в base64url, а не зашифрованы - кодирование не равно секретности. Любой, у кого есть токен, уже может прочитать его claim'ы; подпись лишь доказывает, что они не были изменены тем, у кого нет ключа. Никогда не помещайте в payload JWT то, что не должно быть прочитано злоумышленником напрямую.
У моего токена 3 части, но он всё равно не декодируется - почему?+−
Каждый из трёх сегментов (заголовок, payload, подпись) должен быть корректным текстом base64url, а заголовок и payload должны декодироваться в корректный JSON. Этот инструмент декодирует заголовок и payload независимо друг от друга и точно сообщает, какой из них повреждён и почему (плохой base64, плохой UTF-8 или некорректный JSON), вместо того чтобы просто молча завершиться неудачей.