Декодер JWT — посмотрите, что внутри токена

Разберите JSON Web Token: заголовок, полезная нагрузка и срок действия. Всё работает в браузере, никуда ничего не отправляется.

Токен JWT

Символов: 0Сегментов: 0

Этот токен

Вставьте токен — всё, что внутри, появится здесь

Токен не покидает ваш браузер

Как устроен JWT

JSON Web Token — это три сегмента base64url, разделённые точками. Первые два — обычный JSON: они подписаны, но НЕ зашифрованы, поэтому любой, у кого есть токен, прочитает его содержимое. Подпись доказывает лишь то, что токен не изменяли.

Заголовок

Каким алгоритмом подписан (alg) и какого типа токен (typ). Иногда здесь же лежит идентификатор ключа — kid.

Полезная нагрузка

Утверждения: кто, для кого, до какого момента. Открытый текст — поэтому секретам здесь не место.

Подпись

Подпись заголовка и нагрузки, сделанная общим секретом или закрытым ключом. Только она доказывает подлинность токена.

Зарегистрированные утверждения (RFC 7519)

УтверждениеНазваниеЗначение
issIssuerКто выпустил токен — обычно URL сервера авторизации. Принимающая сторона сверяет его со списком разрешённых.
subSubjectО ком токен. В большинстве систем это внутренний идентификатор пользователя, а не email, потому что email меняется.
audAudienceДля кого токен. Проверяется, чтобы один сервис не принял токен другого сервиса.
expExpiration TimeПосле этого момента токен принимать нельзя. Секунды с начала эпохи.
nbfNot BeforeДо этого момента токен ещё не действует. Используется редко.
iatIssued AtКогда токен выпущен. Вместе с exp даёт время жизни токена.
jtiJWT IDУникальный идентификатор токена, чтобы один и тот же нельзя было использовать повторно.

Часто задаваемые вопросы

Зашифрован ли JWT? Может ли кто угодно прочитать нагрузку?

JWT подписан, а не зашифрован. Заголовок и нагрузка — обычный base64url, поэтому любой, у кого есть токен, декодирует и прочитает их за секунду. Подпись гарантирует ровно одно: токен не изменяли в пути. Именно поэтому пароли, номера карт и прочие секреты в нагрузку не кладут.

Проверяет ли этот инструмент подпись?

Нет, и это сделано намеренно. Для проверки нужен общий секрет сервера (для HS256) или его открытый ключ (для RS256). Ввод общего секрета на веб-странице — самый простой способ его утечки, даже если страница никуда его не отправляет. Проверка должна происходить на сервере, в библиотеке.

Как понять, истёк ли токен?

Поле exp в нагрузке — число секунд с начала эпохи. Инструмент сравнивает его с часами вашего браузера и говорит об этом одной фразой сверху: действителен или просрочен и когда. Если поля exp нет вовсе, инструмент пишет «нет поля срока действия», а не «действителен» — называть действительным то, что никто не проверял, было бы неправильным ответом.

Отправляется ли мой токен на сервер?

Нет. Декодирование происходит в браузере, и после загрузки страницы инструмент не делает ни одного сетевого запроса. Токен нигде не сохраняется: обновите страницу — и его нет.