Как пользоваться JWT-декодером
- Вставьте токен в поле — длинный текст, который начинается с
eyJ. Скопированный заголовокAuthorization: Bearer …, кавычки вокруг токена и переносы строк внутри него убираются автоматически. - Прочитайте раскодированные заголовок и полезную нагрузку в виде отформатированного JSON, статус срока действия вверху и стандартные утверждения (claims) с датами в вашем часовом поясе — и с тем, сколько времени прошло или осталось.
- Чтобы проверить подпись, введите ключ: общий секрет для HS256, HS384 и HS512 или открытый ключ для токенов RS, PS, ES и EdDSA — блоком PEM, в виде JWK или целым JWKS. Результат: Подпись верна или Подпись неверна.
Что внутри JWT
JSON Web Token (RFC 7519) — это три куска текста base64url, соединённые точками: header.payload.signature. Заголовок и нагрузка — объекты JSON, они лишь закодированы, а не зашифрованы, поэтому всегда начинаются с eyJ — так кодируется {". Заголовок называет алгоритм подписи (alg), нагрузка содержит утверждения о пользователе или сессии. Подпись вычисляется над первыми двумя частями ровно в том виде, как они записаны, поэтому изменение одного символа в любой из них её ломает.
| Утверждение | Название | Что означает |
|---|---|---|
iss | Издатель | Кто создал и подписал токен, часто URL сервера авторизации |
sub | Субъект | О ком токен, обычно ID пользователя |
aud | Аудитория | Сервис или сервисы, которые должны его принять; токен для одного API другой API обязан отклонить |
exp | Срок действия | После этого момента токен должен отклоняться |
nbf | Не раньше | До этого момента токен должен отклоняться |
iat | Время выпуска | Когда токен создан |
jti | ID токена | Уникальный ID, чтобы сервер мог отклонить уже виденный токен |
Три даты — это NumericDate: секунды с 1 января 1970 года (UTC), те же числа, что Unix-время. Значение из 13 цифр — это миллисекунды, частая ошибка, о которой декодер предупредит. Даты показываются в часовом поясе вашего устройства, например по Москве (UTC+3). Серверы обычно допускают расхождение часов на минуту-другую; статус здесь считается без запаса.
Пример
RFC 7515, стандарт JSON Web Signature, подписывает в своём первом примере (приложение A.1) такой токен:
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ.dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
Его заголовок раскодируется в { "typ": "JWT", "alg": "HS256" } — токен HMAC SHA-256, — а нагрузка в { "iss": "joe", "exp": 1300819380, "http://example.com/is_root": true }. Издатель — «joe», есть одно собственное утверждение (http://example.com/is_root), а exp 1300819380 — это 2011-03-22 18:43:00 UTC: в октябре 2026 года статус — «Истёк 16 лет назад». Чтобы проверить подпись, вставьте ключ из RFC в виде JWK:
{"kty":"oct","k":"AyM1SysPpbyDfgZld3umj1qzKObwVMkoqQ-EstJQLr_T-1qS0gZH75aKtMN3Yj0iPS4hcgUuTwjAzZr1Z9CAow"}
и подпись окажется верной. Измените одну букву нагрузки — и она станет неверной.
В поле уже стоит известный пример с jwt.io; его секрет — your-256-bit-secret. Это 19 байт, меньше 32 байт, которых RFC 7518 требует для HS256, поэтому при проверке декодер это отметит.
Проверка подписи
- HS256, HS384, HS512 используют один общий секрет и для подписи, и для проверки. Введите его обычным текстом или вставьте как JWK типа
oct, если он хранится в Base64. - RS256 и PS256 (RSA) и ES256 (эллиптические кривые; P-384 и P-521 для ES384 и ES512) подписываются закрытым ключом и проверяются парным открытым. Провайдеры входа (Keycloak, Auth0, Google и другие OpenID Connect-серверы) публикуют открытые ключи как JWKS по адресу
jwks_uriиз/.well-known/openid-configuration; вставьте этот JSON, и декодер выберет ключ с тем жеkid, что и в токене. - Токены, подписанные по ГОСТ Р 34.10-2012, здесь раскодируются, но их подпись не проверить: Web Crypto в браузерах не поддерживает российские алгоритмы, и страница честно скажет, что этот
algпроверить нельзя. - Проверка идёт через встроенный в браузер Web Crypto — тот же код, что защищает HTTPS. Ключи используются только для проверки: ничего не подписывается, не сохраняется и не отправляется.
Советы по безопасности
- Декодировать — не значит проверить. JWT может прочитать кто угодно и написать с любыми утверждениями — тоже. Доверяйте токену только после того, как ваш сервер проверил подпись,
exp,issиaud. - Отклоняйте alg «none». Это неподписанный токен, и если его принимать, злоумышленник подделает любую личность (RFC 8725, рекомендации по JWT).
- Фиксируйте алгоритм. Сервер, который проверяет токен HS256 своим открытым ключом RSA как «секретом», можно обмануть поддельным токеном — это атака подмены алгоритма. Декодер такое сочетание не принимает.
- Не вставляйте живые боевые токены на сайты — включая этот. Страница всё раскодирует локально и ничего не отправляет, но действующий токен — это пароль на время своей жизни. По возможности берите истёкшие или тестовые токены и никогда не вставляйте закрытый ключ: для проверки нужен только открытый.
- Не кладите секреты в нагрузку. Её прочитает любой обладатель токена. Если сами утверждения должны оставаться тайной, используйте зашифрованный JWT (JWE) из пяти частей; декодер узнаёт такие токены и показывает их заголовок.
Посмотреть время в других форматах или разобрать идентификатор из sub помогут генератор и проверка UUID и форматирование JSON.
Частые вопросы
Безопасно ли вставлять сюда JWT?
Токен раскодируется и проверяется JavaScript в вашем браузере, никогда не отправляется на сервер, и страница его не сохраняет. Но действующий токен работает как временный пароль, поэтому с любым сайтом лучше привыкнуть вставлять истёкшие или тестовые токены, а если вставили живой туда, где не уверены, — выйти из системы (это отзывает часть токенов).
Можно ли раскодировать JWT без секрета?
Да. Заголовок и нагрузка только закодированы в base64url, ключ для чтения не нужен. Секрет или открытый ключ нужен лишь для проверки подписи — чтобы доказать, что токен подлинный и не изменён.
Почему декодер пишет «Подпись неверна»?
Либо токен изменили после подписи, либо ключ не тот: секрет из другого окружения (тестового вместо боевого), пропущенный или лишний символ, старый открытый ключ после ротации или секрет, который сначала нужно раскодировать из Base64 (вставьте его как JWK типа oct).
Чем JWT отличается от JWS и JWE?
JWS (RFC 7515) — подписанные данные из трёх частей, JWE (RFC 7516) — зашифрованные данные из пяти. JWT (RFC 7519) — набор утверждений, который переносится в одном из них, почти всегда в JWS, поэтому «JWT» обычно и означает подписанный токен.
Как узнать, когда истекает токен?
Посмотрите на Истекает (exp): декодер показывает дату в вашем часовом поясе и сколько осталось — «через 2 дня» или «3 часа назад». Токен без exp сам по себе не истекает, и для токенов доступа это риск.
Обновлено: 16 октября 2026 г.