Що це за інструмент?
JWT (JSON Web Token) — це компактний, безпечний для URL рядок, що використовується для передачі claims між двома сторонами — найчастіше як токен автентифікації після входу. Він складається з трьох частин, розділених крапками: заголовка (алгоритм і тип токена), корисного навантаження (фактичні claims — ID користувача, ролі, термін дії тощо) і підпису (використовується сервером для перевірки, що токен не був змінений).
Заголовок і корисне навантаження — це просто JSON, закодований у Base64URL, а не зашифрований, тож будь-хто може декодувати й прочитати їх без секретного ключа. Лише для перевірки підпису потрібен секрет. Саме це й робить цей інструмент: декодує читабельні частини й показує їх у вигляді відформатованого JSON, не намагаючись перевірити підпис.
JWT стандартизовано в RFC 7519, а рівень підпису (JWS) визначено окремо в RFC 7515 — корисні джерела, коли потрібен офіційний перелік зареєстрованих claims, таких як exp, iat, sub та aud.
Навіщо його використовувати?
- Миттєво читабельний заголовок і корисне навантаження, відформатовані як JSON — більше не потрібно вручну розділяти рядок і декодувати Base64.
- Автоматична перевірка терміну дії: якщо корисне навантаження містить claim "exp", воно перетворюється на читабельну дату й позначається як прострочене чи дійсне.
- Копіювання в один клік для заголовка чи корисного навантаження окремо.
- 100% на стороні клієнта — токен декодується локально й ніколи не передається, безпечно використовувати навіть із токенами з продакшн-системи.
- Перевірка підпису не виконується й не заявляється — це інструмент для налагодження/перегляду, а не валідатор.
Як користуватися
- Вставте ваш JWT у поле (повний рядок, включно з усіма трьома частинами, розділеними крапками).
- Заголовок і корисне навантаження декодуються автоматично під час вводу.
- Перевірте рядок терміну дії, якщо токен має claim "exp" — він показує точну дату й чи закінчився термін дії токена.
- Натисніть "Копіювати" під будь-яким полем, щоб скопіювати цю частину як JSON.
Приклад
Введення
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0IiwibmFtZSI6IkpvaG4gRG9lIiwiZXhwIjoxNzAwMDAwMDAwfQ.dQw4w9WgXcQРезультат
Заголовок: {"alg": "HS256"}
Корисне навантаження: {"sub": "1234", "name": "John Doe", "exp": 1700000000}Підпис (третя частина) ніколи не декодується й не перевіряється — це непрозорий хеш, що використовується на сервері для перевірки автентичності.
Практичні поради
- Налагодження помилок "недійсний токен": спочатку декодуйте корисне навантаження, щоб перевірити claim "exp" — прострочений токен є найпоширенішою причиною, і це не завжди очевидно з самого повідомлення про помилку.
- Перевірка вмісту токена стороннього API: багато API повертають непрозорий на вигляд JWT як токен доступу — декодуйте його тут, щоб побачити області доступу, ID користувача чи термін дії, які фактично отримує ваша інтеграція.
- Ніколи не вважайте, що JWT зашифрований: якщо ви бачите чутливі дані (email, внутрішні ID) у декодованому корисному навантаженні під час розробки, це сигнал перенести ці дані на сервер, а не покладатися, що клієнт їх не прочитає.
Поширені claims, які ви побачите в корисному навантаженні
| Claim | Значення |
|---|---|
| sub | Suject — зазвичай ID користувача, якого представляє токен |
| exp | Час закінчення терміну дії (Unix-мітка) — токен недійсний після цього моменту |
| iat | Issued at — коли токен було створено |
| iss | Issuer — який сервіс/сервер видав токен |
| aud | Audience — для якого сервісу призначений токен |
| role / roles / scope | Власні claims — права чи ролі, надані користувачу (не є частиною стандарту JWT, але зустрічаються дуже часто) |
Часті запитання
Чи перевіряє цей інструмент підпис JWT?
Ні. Перевірка підпису вимагає секретного або публічного ключа, використаного для підписання токена, який має лише видавний сервер. Цей інструмент лише декодує заголовок і корисне навантаження — читабельні частини — щоб ви могли переглянути claims і термін дії без потреби в будь-якому ключі.
Чи безпечно вставляти сюди реальний продакшн-токен JWT?
Декодування відбувається повністю у вашому браузері за допомогою JavaScript — токен ніколи не надсилається на жоден сервер, включно з нашим. Тим не менш, ставтеся до токенів як до паролів: не вставляйте їх в інструменти, яким не довіряєте, і уникайте показу скриншотів декодованих токенів, що містять чутливі claims.
Чому будь-хто може прочитати корисне навантаження мого JWT без пароля?
Так і задумано — заголовок і корисне навантаження JWT кодуються в Base64URL, а не шифруються. Кодування — це не безпека; воно просто робить JSON безпечним для URL при передачі. Ніколи не кладіть секрети (паролі, номери кредитних карт) безпосередньо в корисне навантаження JWT — вважайте, що будь-хто, у кого є токен, може прочитати його вміст.
Що означає claim "exp" і чому це важливо?
"exp" — це час закінчення терміну дії токена, у вигляді Unix-мітки часу (секунди з 1970 року). Сервери відхиляють JWT, щойно цей час минув, змушуючи клієнта повторно автентифікуватися. Цей інструмент перетворює його на читабельну дату й позначає, чи термін уже минув, що корисно для налагодження проблем на кшталт "чому мене вилогінило".
Мій токен показує помилку розбору JSON — чому?
Або рядок не є дійсним JWT (має складатися рівно з трьох частин, розділених крапками), або він був обрізаний чи змінений — поширена причина — токен, випадково розбитий на кілька рядків, або відсутні кінцеві символи при копіюванні.