JWT декодер
Розібрати JWT на header, payload і підпис
Дані не залишають ваш браузер
Цей інструмент повністю працює на вашому пристрої: обчислення виконує JavaScript у вкладці. Ми не надсилаємо введений текст на сервер, не зберігаємо і не логуємо його. Можете сміливо працювати з робочими даними - і навіть відключити інтернет після завантаження сторінки.
- Термін дії
- Видано
Підпис лише показано, але не перевірено: для перевірки потрібен секретний ключ, а він не має потрапляти в онлайн-інструмент.
Що таке 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 із публічним ключем як секретом. Алгоритм має бути жорстко заданий у коді, а не прочитаний із того, що прислали.
- Де виконується
- у браузері
- Категорія
- Кодування