Декодирование JSON Web Tokens
JSON Web Token (JWT) — это компактная строка, используемая для передачи информации об аутентификации и правах доступа между системами. Чаще всего она передается в заголовке Authorization: Bearer после входа в систему. Токен выглядит как случайный набор символов, но на самом деле состоит из трех частей, закодированных в формате Base64URL: заголовка, полезной нагрузки и подписи. Этот декодер JWT разделяет токен, декодирует первые две части в читаемый формат JSON и объясняет значения важных полей. Декодирование и проверка происходят локально, поэтому ваш токен никуда не передается.
Возможности
- Заголовок и полезная нагрузка декодируются и выводятся в отформатированном виде, для каждой части есть кнопка копирования.
- Расшифровка временных меток: поля
iat,nbf,expиauth_timeконвертируются из секунд Unix-времени в даты вашего часового пояса. - Проверка срока действия, которая сразу показывает, истек ли срок действия токена или он еще не активен.
- Проверка подписи HMAC для алгоритмов HS256, HS384 и HS512 с использованием Web Crypto API вашего браузера.
- Работает офлайн после загрузки страницы; никакие данные никуда не отправляются.
Когда это может понадобиться
Отладка аутентификации. Если запрос завершается ошибкой 401 Unauthorized, декодируйте токен, чтобы проверить, не истек ли его срок действия, выдан ли он для нужной аудитории (aud) и содержит ли ожидаемые роли и права доступа (scopes).
Разработка и тестирование API. Перед релизом убедитесь, что ваш сервер помещает в токен нужные данные и устанавливает правильное время истечения срока действия.
Изучение работы OAuth и OpenID Connect. ID-токены и токены доступа (access tokens) от провайдеров аутентификации часто представляют собой JWT. Декодирование тестового токена покажет, какой информацией о пользователе делится провайдер.
Структура JWT
header.payload.signature
- Заголовок — тип токена и алгоритм подписи, например
{"alg":"HS256","typ":"JWT"}. - Полезная нагрузка — утверждения (claims). Стандартные утверждения включают
iss(издатель),sub(субъект, обычно ID пользователя),aud(аудитория),exp,nbf,iatиjti(ID токена). Приложения могут добавлять собственные утверждения, такие какnameилиrole. - Подпись — создается путем подписания
header.payloadс помощью секрета (HMAC) или закрытого ключа (RSA, ECDSA, EdDSA). Если изменить хотя бы один символ заголовка или полезной нагрузки, подпись станет недействительной.
Поскольку полезная нагрузка только кодируется, никогда не храните в JWT секретные данные, например пароли. Для декодирования других данных Base64 используйте декодер Base64; для работы с временными метками используйте конвертер Unix-времени.