Что делает инструмент
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. Секрет или ключ хранятся только в памяти этой страницы: они не сохраняются, не попадают в адресную строку и не включаются в ссылки для отправки. И всё же не вставляйте рабочие ключи в веб-страницы, которые вы не контролируете.