Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас

JWT декодер

Розібрати JWT на header, payload і підпис

Дані не залишають ваш браузер

Цей інструмент повністю працює на вашому пристрої: обчислення виконує JavaScript у вкладці. Ми не надсилаємо введений текст на сервер, не зберігаємо і не логуємо його. Можете сміливо працювати з робочими даними - і навіть відключити інтернет після завантаження сторінки.

Header
Payload
Термін дії
Видано

Підпис лише показано, але не перевірено: для перевірки потрібен секретний ключ, а він не має потрапляти в онлайн-інструмент.

Поділитись

Що таке JWT

JSON Web Token - це рядок із трьох частин, розділених крапками: header.payload.signature. Перші дві - звичайний JSON, закодований у Base64URL. Третя - підпис, який доводить, що токен видали саме ви і його не змінювали.

eyJhbGciOiJIUzI1NiJ9 . eyJzdWIiOiIxMjMifQ . dBjftJeZ4CVP...
      header                 payload            signature

Головне непорозуміння

JWT не шифрує дані. Base64 - це кодування, а не шифрування: будь-хто, хто має токен, читає його вміст за секунду - як щойно зробив цей інструмент, не питаючи жодного ключа.

Підпис захищає від підробки, а не від читання. Тому в payload не можна класти нічого чутливого: ні паролів, ні персональних даних, ні внутрішніх ідентифікаторів, які не варто показувати.

Стандартні поля payload

Поле Значення
sub кому виданий токен (зазвичай id користувача)
iat коли виданий (Unix timestamp)
exp коли протермінується
iss хто видав
aud для кого призначений
jti унікальний id токена, щоб можна було відкликати

Інструмент вище показує exp та iat у читабельному вигляді й одразу каже, чи токен ще живий.

Чому підпис тут не перевіряється

Щоб перевірити підпис HS256, потрібен ваш секретний ключ. Вставляти робочий ключ у будь-який онлайн-інструмент не можна - навіть у той, що обіцяє нічого не зберігати. Тому перевірка підпису тут відсутня свідомо: декодування корисне і безпечне, перевірка вимагала б того, чого просити не варто.

У Laravel

Для API всередині свого ж застосунку JWT переважно не потрібен. Sanctum видає прості токени в базі, які легко відкликати - на відміну від JWT, який діє до exp, і відкликати його можна лише окремим чорним списком.

// Sanctum: токен зберігається в БД, відкликається одним рядком
$token = $user->createToken('mobile')->plainTextToken;
$user->tokens()->delete();

JWT виправданий, коли токен перевіряє інший сервіс, який не має доступу до вашої бази - типова ситуація в мікросервісах або при SSO.

// Перевірка чужого токена: підпис, термін дії і видавець - усі три
$decoded = JWT::decode($token, new Key($publicKey, 'RS256'));

Ніколи не довіряйте полю alg із самого токена. Класична атака - підмінити alg на none або на HS256 із публічним ключем як секретом. Алгоритм має бути жорстко заданий у коді, а не прочитаний із того, що прислали.