Декодер JWT — посмотрите, что внутри токена
Разберите JSON Web Token: заголовок, полезная нагрузка и срок действия. Всё работает в браузере, никуда ничего не отправляется.
Токен JWT
Символов: 0Сегментов: 0
Этот токен
Вставьте токен — всё, что внутри, появится здесь
Токен не покидает ваш браузер
Как устроен JWT
JSON Web Token — это три сегмента base64url, разделённые точками. Первые два — обычный JSON: они подписаны, но НЕ зашифрованы, поэтому любой, у кого есть токен, прочитает его содержимое. Подпись доказывает лишь то, что токен не изменяли.
Заголовок
Каким алгоритмом подписан (alg) и какого типа токен (typ). Иногда здесь же лежит идентификатор ключа — kid.
Полезная нагрузка
Утверждения: кто, для кого, до какого момента. Открытый текст — поэтому секретам здесь не место.
Подпись
Подпись заголовка и нагрузки, сделанная общим секретом или закрытым ключом. Только она доказывает подлинность токена.
Зарегистрированные утверждения (RFC 7519)
| Утверждение | Название | Значение |
|---|---|---|
| iss | Issuer | Кто выпустил токен — обычно URL сервера авторизации. Принимающая сторона сверяет его со списком разрешённых. |
| sub | Subject | О ком токен. В большинстве систем это внутренний идентификатор пользователя, а не email, потому что email меняется. |
| aud | Audience | Для кого токен. Проверяется, чтобы один сервис не принял токен другого сервиса. |
| exp | Expiration Time | После этого момента токен принимать нельзя. Секунды с начала эпохи. |
| nbf | Not Before | До этого момента токен ещё не действует. Используется редко. |
| iat | Issued At | Когда токен выпущен. Вместе с exp даёт время жизни токена. |
| jti | JWT ID | Уникальный идентификатор токена, чтобы один и тот же нельзя было использовать повторно. |
Часто задаваемые вопросы
Зашифрован ли JWT? Может ли кто угодно прочитать нагрузку?
JWT подписан, а не зашифрован. Заголовок и нагрузка — обычный base64url, поэтому любой, у кого есть токен, декодирует и прочитает их за секунду. Подпись гарантирует ровно одно: токен не изменяли в пути. Именно поэтому пароли, номера карт и прочие секреты в нагрузку не кладут.
Проверяет ли этот инструмент подпись?
Нет, и это сделано намеренно. Для проверки нужен общий секрет сервера (для HS256) или его открытый ключ (для RS256). Ввод общего секрета на веб-странице — самый простой способ его утечки, даже если страница никуда его не отправляет. Проверка должна происходить на сервере, в библиотеке.
Как понять, истёк ли токен?
Поле exp в нагрузке — число секунд с начала эпохи. Инструмент сравнивает его с часами вашего браузера и говорит об этом одной фразой сверху: действителен или просрочен и когда. Если поля exp нет вовсе, инструмент пишет «нет поля срока действия», а не «действителен» — называть действительным то, что никто не проверял, было бы неправильным ответом.
Отправляется ли мой токен на сервер?
Нет. Декодирование происходит в браузере, и после загрузки страницы инструмент не делает ни одного сетевого запроса. Токен нигде не сохраняется: обновите страницу — и его нет.