JWT Decoder: розбір токена
Розкладає токен на три секції та розшифровує exp і iat у дату. Підпис не перевіряється.
Показує, що насправді лежить у токені
Три блоки base64 через точку неможливо прочитати, а зʼясувати треба зазвичай одне: коли токен протермінувався і який у ньому sub. Інструмент розкладає токен на секції, підсвічує кожну своїм кольором і перекладає числові часові позначки в дату з поміткою, чи токен ще живий.
JWT це три частини base64url через точку: header з алгоритмом, payload із даними і підпис. Перші дві не зашифровані, а лише закодовані: будь-хто може їх прочитати, тож не кладіть у payload нічого чутливого. Захищає лише підпис: він гарантує, що payload не змінювали, за умови що ви його перевіряєте.
// Розкодувати payload тривіально, і це НЕ перевірка
$payload = json_decode(base64_decode(strtr(explode('.', $jwt)[1], '-_', '+/')), true);
// Перевірка підпису обовʼязкова частина
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
$claims = JWT::decode($jwt, new Key($secret, 'HS256'));
// кидає виняток на протермінованому чи підробленому токені
Ніколи не довіряйте payload без перевірки підпису. Класична дірка: сервер читає sub із розкодованого токена й пускає користувача, тоді будь-хто підміняє sub і входить як адміністратор. Друга дірка: алгоритм беруть із header самого токена, і атакуючий ставить туди none.
Що питають про цей інструмент
Ні. Розкодування відбувається у браузері, запит на сервер не йде. Це принципово для цього інструмента: у нього вставляють бойові токени, які дають доступ до реальних акаунтів. Але після роботи з чужим токеном усе одно варто його відкликати.
Для перевірки потрібен ваш секрет або публічний ключ, а надсилати секрет у сторонній інструмент погана ідея за визначенням. Перевірка має відбуватись у вашому коді. Тут ви бачите вміст, і цього достатньо, щоб зрозуміти, чому токен не працює.
Значить сервер не перевіряє exp. Це справжня проблема, а не косметична: протермінований токен має відхилятись, інакше вихід із системи не працює. Перевірте, що бібліотека справді валідує claims, а не тільки підпис.