Utilia

Декодер JWT

Декодуйте заголовок і корисне навантаження JWT, перегляньте exp, iat та nbf як дати й перевірте підпис HS256, RS256, ES256 чи EdDSA у браузері.

Токени – це облікові дані. Цей інструмент декодує й перевіряє їх у вашому браузері та нікуди не надсилає.

Перевірка підпису

HS256/384/512: введіть спільний секрет. RS, PS, ES (256/384/512) та EdDSA: вставте відкритий ключ у форматі PEM (відкритий ключ, відкритий ключ RSA або сертифікат) чи JWK (набір JWK добирається за kid).

Як декодувати JWT

  1. Вставте токен у поле JSON Web Token. Повне значення Authorization: Bearer … теж підійде: префікс Bearer і переноси рядків буде прибрано.
  2. Токен декодується під час введення (або натисніть Декодувати). Заголовок і Корисне навантаження з’являються у вигляді відформатованого JSON, кожен зі своєю кнопкою Копіювати.
  3. Перегляньте таблицю Часові claims: для exp, nbf та iat показано вихідне значення, дату у вашому часовому поясі, відносний час («через 3 години», «2 дні тому») і статус, наприклад Прострочено або Ще не дійсний.
  4. Зверніть увагу на попередження над результатами, наприклад коли alg має значення none або коли дата схожа на мілісекунди.
  5. Щоб перевірити підпис, введіть ключ у розділі Перевірка підпису й натисніть Перевірити підпис.

Декодування – це не перевірка

JWT складається з трьох частин Base64url, розділених крапками: заголовок.навантаження.підпис. Заголовок і навантаження лише закодовані, а не зашифровані, тому будь-хто, хто має токен, може їх прочитати, і цей інструмент декодує будь-який токен без ключа. Це також означає, що декодоване навантаження нічого не доводить: його могли змінити. Лише дійсний підпис підтверджує, що токен видав власник ключа й що відтоді його не змінювали. Тому до перевірки в рядку статусу написано «Декодовано (підпис не перевірено)».

Токен із п’яти частин – це JWE (зашифрований JWT): його вміст не прочитати без ключа розшифрування, і інструмент повідомляє про це.

Перевірка підпису

  • HS256, HS384, HS512 (HMAC): введіть спільний Секрет. У полі Формат секрету вкажіть, чи це звичайний текст (UTF-8), чи Base64/Base64url, адже деякі провайдери зберігають секрети в Base64. Також можна вставити JWK типу oct. Якщо секрет коротший за результат хеш-функції (32 байти для HS256), інструмент зазначить, що він менший за мінімум із RFC 7518.
  • RS256/384/512, PS256/384/512, ES256/384/512 та EdDSA: вставте Відкритий ключ (PEM або JWK). Підтримувані блоки PEM: PUBLIC KEY, RSA PUBLIC KEY і CERTIFICATE (ключ береться із сертифіката X.509). Працює і JWK, і цілий набір JWK: використовується ключ, чий kid збігається із заголовком. Закриті ключі відхиляються: для перевірки вони не потрібні. EdDSA підтримує Ed25519 у браузерах, де це реалізовано у Web Crypto.

Перевірка використовує Web Crypto API браузера. Результат «Недійсний підпис» означає, що ключ хибний або токен змінено. Зверніть увагу: алгоритм береться із заголовка токена, тоді як справжній сервер має задавати очікуваний алгоритм у власній конфігурації, інакше його зможе вибрати зловмисник.

Нотатки щодо безпеки

  • Токени – це облікові дані. Той, хто має чинний токен доступу, зазвичай може діяти від імені його власника до завершення терміну дії. Цей інструмент декодує й перевіряє все у вашому браузері та нікуди не надсилає ні токен, ні ключ. Проте все одно не вставляйте робочі токени в інструменти, які не можете перевірити.
  • alg: none означає, що токен не підписано. Підробити його може будь-хто, тож сервер має його відхиляти. Інструмент показує попередження та відмовляється «перевіряти» такий токен.
  • Перевірки часу тут використовують годинник вашого комп’ютера без допуску; сервери часто допускають розбіжність в одну-дві хвилини.
  • Дати в JWT (NumericDate) – це секунди від 1 січня 1970 року за UTC. 13-значне значення, ймовірно, задано в мілісекундах, і це поширена помилка.

Поширені запитання

Чи може цей інструмент сказати, що токен дійсний?

Він покаже, чи підпис збігається з наданим вами ключем і чи виконано умови exp та nbf просто зараз. Чи буде токен прийнято, залежить ще й від перевірок, які знає лише сервер: очікуваний емітент (iss), аудиторія (aud), алгоритм і відкликання.

Чому перевірка не проходить із правильним секретом?

Перевірте Формат секрету: секрет у Base64, уведений як текст, дає інший ключ. Також переконайтеся, що до секрету не потрапив пробіл чи перенос рядка, адже ключі HMAC порівнюються побайтово.

Чим відрізняються RS256, PS256 та ES256?

Усі три – підписи з відкритим ключем і SHA-256. RS256 використовує RSA з доповненням PKCS#1 v1.5, PS256 – RSA з доповненням PSS, а ES256 – ECDSA на кривій P-256, що дає значно коротші підписи.

Де знайти відкритий ключ провайдера?

Провайдери ідентифікації публікують JWKS (JSON Web Key Set), зазвичай із посиланням у /.well-known/openid-configuration у полі jwks_uri. Відкрийте його самі й вставте JSON сюди: інструмент добере ключ за kid і нічого не завантажуватиме з мережі.

Чи безпечно вставляти сюди свій токен?

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