Як користуватися
- Виберіть HS256, HS384 або HS512.
- Відредагуйте поля payload і натисніть «Встановити iat і exp», щоб додати поточний час і термін дії.
- Введіть тестовий секрет або згенеруйте випадковий 256-бітний.
- Скопіюйте підписаний токен. Щоб перевірити токен, перейдіть на «Перевірити підпис», вставте його та введіть секрет.
Як це працює
JSON Web Token (RFC 7519) складається з трьох частин у кодуванні Base64URL: заголовка, корисного навантаження з клеймами та підпису. З алгоритмами HMAC HS256, HS384 та HS512 підпис — це HMAC з SHA-256, SHA-384 або SHA-512 над «header.payload», створений за допомогою спільного секрету. Кожен, хто має секрет, може створювати та перевіряти токени.
Інструмент серіалізує заголовок і корисне навантаження як компактний JSON, кодує їх і підписує за допомогою crypto.subtle — Web Crypto API, вбудованого у ваш браузер. Поле alg у заголовку завжди відповідає обраному алгоритму, typ за замовчуванням — JWT, а всі інші поля заголовка, як-от kid, зберігаються. «Встановити iat і exp» записує поточний час як iat (час видачі) та додає обраний термін дії як exp; обидва значення — у секундах від 1 січня 1970 року UTC. Результат збігається з іншими бібліотеками JWT; наприклад, класичний приклад токена jwt.io відтворюється точно.
Секрет може бути звичайним текстом (ключем стають його байти UTF-8) або байтами в кодуванні Base64/Base64URL, яке використовують багато фреймворків. Кнопка випадкового секрету створює 32 випадкові байти за допомогою crypto.getRandomValues. Для HS256 використовуйте щонайменше 32 випадкові байти; короткі секрети, обрані вручну, можна вгадати офлайн із будь-якого токена.
Під час перевірки токен декодується, перевіряється, що в ньому використано алгоритм HMAC, і підпис переобчислюється за допомогою crypto.subtle.verify. Також показується, коли exp або nbf означають, що токен прострочений або ще не дійсний. RS256, ES256 та інші алгоритми з відкритим ключем не підтримуються, і перевірка тут не перевіряє видавця, аудиторію або інші клейми, які може вимагати ваш застосунок.
Приклади
Тестування API локально
Ваш сервер розробки очікує токени HS256, підписані секретом «dev-secret-change-me». Установіть sub як тестовий ідентифікатор користувача, натисніть «Встановити iat і exp» і вкажіть 1 годину, введіть секрет і надішліть токен у заголовку Authorization: Bearer.
Перевірка, яким секретом підписано токен
Staging-токен відхиляється. Вставте його в «Перевірити підпис» і спробуйте staging-секрет: повідомлення «Підпис недійсний» означає, що токен підписано іншим секретом або секрет має інший формат (текст замість Base64).
Відтворення прикладу з jwt.io
З заголовком {"alg":"HS256","typ":"JWT"}, payload {"sub":"1234567890","name":"John Doe","iat":1516239022} і секретом «your-256-bit-secret» токен закінчується на SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c, так само як на jwt.io.
Поширені запитання
Чи надсилається мій секрет на ваш сервер?
Ні. Підписання та перевірка виконуються за допомогою Web Crypto API у вашому браузері, і секрет ніде не зберігається й нікуди не надсилається. Усе одно рекомендуємо використовувати лише тестові секрети, оскільки справжній секрет для підпису ніколи не слід вводити на вебсайті.
Чому підпис недійсний, хоча секрет правильний?
Перевірте формат секрету. Деякі системи використовують текст секрету, інші спочатку декодують його з Base64, що дає інші байти ключа. Також перевірте, що токен не було змінено та що використовується той самий алгоритм.
Чи можу я створити токени RS256 або ES256?
У цьому інструменті ні. Він підтримує лише HMAC-алгоритми зі спільним секретом HS256, HS384 і HS512.
Чи зашифровано payload?
Ні. Підписаний JWT лише закодовано; будь-хто може декодувати й прочитати payload. Підпис лише доводить, що його не було змінено. Не розміщуйте паролі чи інші секрети в payload.
Конфіденційність
Токени створюються та перевіряються лише у вашому браузері за допомогою Web Crypto API. Заголовок, payload, токен і секрет не завантажуються, не зберігаються й не потрапляють в аналітику.