Декодер JWT
Вставте JSON Web Token і перегляньте його заголовок і payload як відформатований JSON: час видачі та закінчення терміну дії показано як дати, а також позначено, чи дійсний токен зараз. Декодування повністю відбувається у вашому браузері, і це важливо, коли токен є чинними обліковими даними.
0 символів · 0 слів · 0 рядків
0 символів · 0 слів · 0 рядків
Працює повністю у вкладці браузера. Ваш текст ніколи не завантажується на сервер і не зберігається.
Зареєстровані поля
Сім назв полів, визначених у RFC 7519 §4.1. Усі необов’язкові; час задається в секундах від 1970-01-01 UTC.
| Поле | Значення |
|---|---|
iss | Видавець: хто створив і підписав токен |
sub | Суб’єкт: користувач або сутність, якої стосується токен |
aud | Аудиторія: для кого призначено токен |
exp | Час завершення: відхиляти токен після цього моменту |
nbf | Не раніше: відхиляти токен до цього моменту |
iat | Час видачі: коли токен створено |
jti | Ідентифікатор JWT: унікальний ідентифікатор для захисту від повторного використання |
Поширені значення alg
| Значення alg | Значення |
|---|---|
HS256 | HMAC із SHA-256; один спільний секрет підписує й перевіряє |
RS256 | Підпис RSA PKCS#1 v1.5 із SHA-256; приватний ключ підписує, відкритий перевіряє |
PS256 | RSA-PSS із SHA-256 |
ES256 | ECDSA на кривій P-256 із SHA-256; короткі підписи |
EdDSA | Підписи Ed25519 або Ed448 |
none | Непідписаний токен; сервери мають його відхиляти |
Що всередині JSON Web Token
JWT визначено в RFC 7519 (травень 2015), де пропонується вимовляти його як англійське слово «jot». Поширена підписана форма — це три рядки Base64url, з’єднані крапками: header.payload.signature. Заголовок (header) містить у полі alg назву алгоритму підпису, наприклад HS256 або RS256, а часто й ідентифікатор ключа в kid. Корисне навантаження (payload) містить claims — JSON-поля, як-от sub (користувач), iss (емітент), aud (цільова аудиторія), а також exp, nbf та iat, які задають час у секундах від 1 січня 1970 року за UTC. Декодер перетворює ці три значення на ваш локальний час і формат ISO 8601 та повідомляє, чи токен закінчився, чи ще не набув чинності, чи перебуває в межах терміну дії.
Base64url — це кодування, а не шифрування, тож будь-хто, у кого є токен, може прочитати його payload так само, як це робить ця сторінка. Ніколи не додавайте до claims паролі, номери карток чи інші секрети. Токен із п’ятьма частинами, розділеними крапками, — це JWE, зашифрований токен: його вміст неможливо прочитати без ключа, і декодер повідомляє про це. Початковий префікс «Bearer », скопійований із заголовка Authorization, видаляється автоматично.
Чому підпис тут не перевіряється
Підпис доводить, що заголовок і payload створила сторона, яка має ключ, і що відтоді їх не змінювали. Для перевірки потрібен цей ключ: спільний секрет для HMAC-алгоритмів, як-от HS256, або публічний ключ емітента для RS256, ES256 чи EdDSA. Вставляти робочий секрет підпису на будь-яку вебсторінку — погана ідея, а декодер, який удавав би, що ручається за токен без ключа, давав би хибне відчуття безпеки, тому цей інструмент показує підпис, але не перевіряє його. Сприймайте побачене як твердження самого токена, а не як факт.
Перевірка має відбуватися на вашому сервері за допомогою підтримуваної бібліотеки із жорстко заданим очікуваним алгоритмом. Це пояснюють дві історичні помилки: прийняття alg «none», що дає змогу будь-кому підробити непідписаний токен, і плутанина алгоритмів, коли сервер, який очікує RS256, змушують перевіряти підпис HS256, використовуючи публічний ключ як секрет HMAC. Декодер потрібен для налагодження: побачити, які claims видає провайдер, помітити неправильну аудиторію або з’ясувати, що сесія завершилася, бо exp минув хвилину тому. Щоб прочитати сирі сегменти Base64url, скористайтеся декодером Base64.
Поширені запитання
- Чи безпечно вставляти справжній access token у декодер JWT?
- На цій сторінці токен не залишає ваш браузер. Проте чинний токен працює як пароль, доки не закінчиться його термін дії, тому краще використовуйте прострочені або тестові токени й не залишайте робочі на скриншотах і в чатах.
- Чому токен показано як прострочений, хоча його щойно видали?
- Спершу перевірте годинник на пристрої. Деякі емітенти видають токени доступу лише на кілька хвилин, а токен, скопійований із журналу, може бути старішим, ніж здається. Якщо exp записано в мілісекундах замість секунд, трапляється зворотне: дата виходить на тисячі років уперед.
- Чи може хтось змінити payload мого JWT?
- Вони можуть змінити й заново закодувати його, але підпис більше не збігатиметься. Сервер, який перевіряє підписи правильним ключем і алгоритмом, відхилить змінений токен.
- Яка різниця між JWS і JWE?
- JWS (RFC 7515) підписаний, складається з трьох частин, і його може прочитати будь-хто. JWE (RFC 7516) зашифрований, має п’ять частин, і payload може прочитати лише власник ключа.
- Чи робить вихід із системи JWT недійсним?
- Сам по собі ні. Підписаний JWT лишається чинним до exp, якщо сервер не веде список заборонених токенів або не перевіряє запис сесії, тому токенам доступу зазвичай дають короткий термін дії.