Що робить інструмент
JSON Web Token (JWT, RFC 7519) — компактний, безпечний для URL рядок із трьох частин, розділених крапками: заголовка з алгоритмом підпису, корисного навантаження з твердженнями (claims) і підпису перших двох частин. API використовують JWT як bearer-токени, провайдери ідентичності — як ID-токени.
Інструмент створює та підписує токен із JSON-корисного навантаження. Підтримуються:
- HS256, HS384, HS512: HMAC зі спільним секретом у вигляді тексту чи Base64.
- RS256, RS384, RS512 і PS256, PS384, PS512: підписи RSA із закритим ключем PEM.
- ES256, ES384, ES512: підписи ECDSA із закритим ключем EC.
Як користуватися
- Запишіть корисне навантаження як JSON-об’єкт або натисніть Приклад.
- Виберіть Алгоритм і введіть секрет або вставте закритий ключ PEM у верхній частині поля введення.
- За бажанням встановіть iat на поточний час, додайте термін дії (exp) або додаткові поля заголовка, наприклад ID ключа.
- Скопіюйте токен із виводу. Вставте його в декодер JWT, щоб переглянути вміст.
Приклад
Із секретом your-256-bit-secret наведене корисне навантаження, підписане HS256, дає відомий приклад токена з jwt.io:
{"sub":"1234567890","name":"John Doe","iat":1516239022}
Заголовок завжди записується як {"alg":"HS256","typ":"JWT"}, після чого йдуть додані поля; alg завжди відповідає вибраному алгоритму.
Рекомендації
Робіть токени короткоживучими за допомогою exp і задавайте iss та aud, щоб токен для одного сервісу не можна було повторно використати в іншому. На сервері завжди перевіряйте підпис із явним списком дозволених алгоритмів і відхиляйте none. Секрети HMAC мають бути довгими й випадковими, не коротшими за вихід хешу (32 байти для HS256).
Часті запитання
› Який алгоритм вибрати?
Той, який перевіряє ваш сервер. HS256 використовує спільний секрет і поширений у межах однієї системи. RS256 і ES256 підписують закритим ключем, а перевірити може будь-хто відкритим — це зручно для токенів, які перевіряють кілька сервісів. Підписи ES256 значно коротші за RS256.
› Які формати закритих ключів підтримуються?
PEM-ключі у PKCS#8 (BEGIN PRIVATE KEY), PKCS#1 RSA (BEGIN RSA PRIVATE KEY) і SEC1 EC (BEGIN EC PRIVATE KEY). Зашифровані ключі спершу експортуйте без парольної фрази. Для ES256, ES384 і ES512 ключ має бути на кривій P-256, P-384 або P-521 відповідно.
› Чи є корисне навантаження JWT секретним?
Ні. Заголовок і корисне навантаження лише закодовані в Base64URL, і будь-хто з токеном може їх прочитати. Підпис захищає від змін, а не від читання. Ніколи не кладіть паролі чи інші секрети в корисне навантаження JWT.
› Чи зберігається мій секрет або закритий ключ і чи надсилається кудись?
Ні. Підпис виконується у браузері через Web Crypto API. Секрет або ключ зберігаються лише в пам’яті цієї сторінки: вони не зберігаються, не потрапляють в адресний рядок і не додаються до посилань для поширення. Проте не вставляйте робочі ключі на вебсторінки, яких ви не контролюєте.