JWT Decoder
Декодування та інспекція JSON Web Token
JWT-токен
Що таке JWT (JSON Web Token)?
JSON Web Token (JWT) — це компактний, URL-безпечний формат токена, визначений у RFC 7519. Він кодує набір claims як об'єкт JSON, а потім підписує — і за потреби шифрує — його, щоб одержувач міг переконатись у тому, що дані не були змінені. JWT є де-факто стандартом для автентифікації без стану в REST API, системах єдиного входу та авторизації мікросервісів.
Структура JWT: Header · Payload · Signature
Кожен JWT складається з трьох сегментів у кодуванні base64url, розділених крапками. Header і Payload — це звичайний JSON, доступний для читання будь-ким, тоді як Signature — криптографічне значення, яке можна перевірити лише правильним ключем.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMTIzIiwibmFtZSI6IkFsaWNlIiwicm9sZSI6ImFkbWluIiwiaWF0IjoxNzE3MjAwMDAwLCJleHAiOjE3MTcyMDM2MDB9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
{
"alg": "HS256",
"typ": "JWT"
}{
"sub": "user123",
"name": "Alice",
"role": "admin",
"iat": 1717200000,
"exp": 1717203600
}Навіщо використовувати декодер JWT?
Необроблені JWT виглядають як випадковий текст. Цей інструмент миттєво відображає Header і Payload у вигляді відформатованого JSON, щоб ви могли перевіряти claims, переглядати терміни дії та аналізувати вибір алгоритмів без написання жодного рядка коду.
Довідник стандартних claims JWT
RFC 7519 визначає сім зареєстрованих імен claims. Вони не є обов'язковими, але їхнє використання настійно рекомендується для сумісності. Ви можете додавати будь-які власні claims до Payload.
| Claim | Опис | Тип |
|---|---|---|
| iss | Видавець — Визначає, хто видав токен — наприклад, URL вашого сервера автентифікації або назва застосунку. | string |
| sub | Суб'єкт — Визначає суб'єкт, якому присвячений JWT — зазвичай ID користувача або сервісний обліковий запис. | string |
| aud | Аудиторія — Визначає передбачуваних одержувачів. Сторона-одержувач повинна перевірити, що це відповідає її ідентифікатору. | string | string[] |
| exp | Час закінчення дії — Unix-мітка часу, після якої токен не повинен прийматися. Завжди встановлюйте це, щоб обмежити шкоду від викраденого токена. | number |
| nbf | Не раніше ніж — Unix-мітка часу, до якої токен не повинен прийматися. Корисно для планування токенів із майбутньою датою. | number |
| iat | Видано о — Unix-мітка часу, коли токен був виданий. Використовується для обчислення віку токена. | number |
| jti | JWT ID — Унікальний ідентифікатор токена. Дозволяє відкликання шляхом зберігання та перевірки використаних значень JTI на стороні сервера. | string |
Алгоритми підпису JWT
Claim заголовка alg оголошує, яким алгоритмом підписаний токен. Вибір впливає на безпеку, продуктивність і можливість сторонніх сервісів перевіряти токени без приватного ключа.
| Алгоритм | Сімейство | Тип ключа | Примітки |
|---|---|---|---|
| HS256 | HMAC | Symmetric | Найпоширеніший. Спільний секрет — будь-хто з секретом може підписувати та перевіряти. |
| HS384 | HMAC | Symmetric | Надійніший варіант HMAC; помірне навантаження на продуктивність. |
| HS512 | HMAC | Symmetric | Найнадійніший варіант HMAC. |
| RS256 | RSA | Asymmetric | Найбільш використовуваний асиметричний алгоритм (Google, Auth0, Okta). Публічний ключ перевіряє без приватного. |
| RS384 | RSA | Asymmetric | Варіант RS із вищим рівнем безпеки. |
| RS512 | RSA | Asymmetric | Найнадійніший варіант RS. |
| ES256 | ECDSA | Asymmetric | Еліптична крива — коротші підписи, ніж у RSA; популярний на мобільних пристроях та IoT. |
| PS256 | RSA-PSS | Asymmetric | RSA-PSS: сучасніший і безпечніший, ніж RS256 на основі PKCS1v1.5. |
| none | — | — | Без підпису — критично небезпечно. Ніколи не приймайте токени з alg: none у продакшені. |
Міркування безпеки
Декодування JWT завжди є безпечним. Довіряти JWT без належної перевірки підпису — ні. Пам'ятайте ці правила щоразу, коли використовуєте токени у своєму застосунку.
- –Декодувати та перевіряти JWT в інструментах розробника або цьому інструменті
- –Використовувати exp, iat і nbf для розуміння терміну дії токена
- –Журналювати claims Payload для налагодження (уникати конфіденційних персональних даних)
- –Читати заголовок alg, щоб зрозуміти, як підписаний токен
- –Довіряти claims у Payload без перевірки підпису на стороні сервера
- –Приймати токени з alg: none — це означає повну відсутність підпису
- –Зберігати токени доступу в localStorage у застосунках із підвищеними вимогами безпеки (використовуйте cookie httpOnly)
- –Встановлювати exp далеко в майбутньому для токенів із конфіденційними дозволами
Поширені випадки використання
Декодування JWT у коді
Header і Payload закодовані у base64url — просто зверніть кодування. Base64url замінює + на - і / на _, та опускає набивку =. Лише Signature потребує секретного ключа.
function decodeJWT(token) {
const [, payload] = token.split('.')
const json = atob(payload.replace(/-/g, '+').replace(/_/g, '/'))
return JSON.parse(json)
}const [, payload] = token.split('.')
const decoded = JSON.parse(
Buffer.from(payload, 'base64url').toString()
)import base64, json
def decode_jwt(token):
payload = token.split('.')[1]
padding = '=' * (-len(payload) % 4)
return json.loads(base64.urlsafe_b64decode(payload + padding))TOKEN="eyJhbGc..." echo $TOKEN | cut -d. -f2 | base64 -d 2>/dev/null | jq .