Декодер JWT
JSON Web Tokens (JWT) — это компактный, URL-безопасный способ представления утверждений между двумя сторонами. Большинство JWT подписаны с использованием JWS (JSON Web Signature), что обеспечивает целостность, но не шифрует содержимое. Этот инструмент декодирует заголовок и полезную нагрузку, показывает утверждения, отображает временные метки в человекочитаемом формате и показывает статус истечения токена.
Спецификации
Типичные сценарии использования
- Отладка потоков аутентификации OAuth 2.0 и OpenID Connect
- Просмотр токенов доступа и ID-токенов от провайдеров идентификации (Auth0, Okta, Keycloak)
- Проверка соответствия утверждений токена ожидаемым значениям при разработке API
- Проверка истечения токена при устранении ошибок "401 Unauthorized"
- Понимание структуры токена при интеграции со сторонними сервисами
- Аудит токенов для проверки безопасности (алгоритм, утверждения, истечение)
Возможности
- Декодирование заголовка и полезной нагрузки JWT (формат JWS)
- Отображение алгоритма (HS256, RS256, ES256, PS256, EdDSA) и типа токена
- Разбор зарегистрированных утверждений: iss (издатель), sub (субъект), aud (аудитория), exp (истечение), nbf (не ранее), iat (выдан), jti (идентификатор JWT)
- Показ статуса истечения с человекочитаемым обратным отсчётом
- Копирование декодированных секций как форматированного JSON
Примеры
Токен доступа OAuth 2.0
Попробовать →Типичный токен доступа со стандартными утверждениями, включая субъект, издателя и истечение.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJleHAiOjE5MTYyMzkwMjJ9.4S5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5Советы
- JWS-токены (наиболее распространённый тип) подписаны, но не зашифрованы. Любой, у кого есть токен, может прочитать полезную нагрузку, декодировав Base64.
- JWE-токены шифруют полезную нагрузку, но встречаются реже. Этот инструмент декодирует JWS-токены.
- Всегда проверяйте подписи на стороне сервера перед доверием утверждениям. Этот инструмент показывает декодированное содержимое, но не проверяет подписи.
- Алгоритм "alg": "none" представляет угрозу безопасности и должен отклоняться серверами.
- Симметричные алгоритмы (HS256) используют общий секрет; асимметричные (RS256, ES256) используют пары открытых/закрытых ключей.
- Утверждение "exp" — это временная метка Unix в секундах. Проверяйте его, чтобы не принимать просроченные токены.
Описание Декодер JWT
JSON Web Tokens (JWT) — доминирующий формат токенов для современной веб-аутентификации и авторизации. JWT — это компактная, URL-безопасная строка, состоящая из трёх сегментов, закодированных в Base64url и разделённых точками: заголовок, указывающий алгоритм подписи, полезная нагрузка, содержащая утверждения о пользователе или сессии, и криптографическая подпись, гарантирующая, что токен не был изменён. Такая структура позволяет любой стороне прочитать содержимое токена простым декодированием Base64, тогда как только стороны с ключом подписи могут создавать или проверять валидные токены.
Большинство JWT используют формат JWS (JSON Web Signature), где полезная нагрузка подписана, но не зашифрована. Поле "alg" заголовка указывает алгоритм: симметричные алгоритмы, такие как HS256, используют общий секрет, известный и издателю, и проверяющему, тогда как асимметричные алгоритмы, такие как RS256 и ES256, используют закрытый ключ для подписи и открытый ключ для проверки. Асимметричные алгоритмы предпочтительны в распределённых системах, поскольку ключ проверки может быть открыто опубликован без компрометации ключа подписи.
Полезная нагрузка содержит зарегистрированные утверждения, определённые RFC 7519: "iss" (издатель), "sub" (субъект), "aud" (аудитория), "exp" (время истечения), "nbf" (не ранее), "iat" (время выдачи) и "jti" (идентификатор JWT). OAuth 2.0 и OpenID Connect добавляют дополнительные утверждения для областей действия, ролей и информации профиля пользователя. Утверждение "exp" критически важно для безопасности — токены без истечения или с чрезмерно длительным сроком действия являются распространённой уязвимостью.
JWT используются в токенах доступа OAuth 2.0, ID-токенах OpenID Connect, аутентификации API и управлении сессиями. Провайдеры идентификации, такие как Auth0, Okta и Keycloak, выдают JWT, которые приложения проверяют без обращения к провайдеру, обеспечивая аутентификацию без состояния. Однако это также означает, что отзыв затруднён — скомпрометированный токен остаётся действительным до истечения срока, поэтому короткие сроки жизни и потоки обновления токенов являются необходимыми практиками безопасности.
Поскольку JWS-токены закодированы в Base64url, а не зашифрованы, любой, кто обладает токеном, может декодировать и прочитать заголовок и полезную нагрузку. Конфиденциальная информация, такая как пароли, номера кредитных карт и секреты, никогда не должна размещаться в полезной нагрузке JWT. JWE (JSON Web Encryption) токены действительно шифруют полезную нагрузку, но они гораздо менее распространены на практике. Различие между кодированием и шифрованием — одна из важнейших вещей для понимания при работе с JWT.
Выбор алгоритма подписи имеет значительные последствия для безопасности. HS256 — симметричный алгоритм, использующий один общий секрет как для подписи, так и для проверки, что упрощает реализацию, но требует, чтобы обе стороны безопасно хранили один и тот же секрет. RS256 и ES256 — асимметричные алгоритмы, использующие закрытый ключ для подписи и открытый для проверки. В распределённых системах асимметричные алгоритмы предпочтительны, поскольку открытый ключ можно свободно распространять — часто через эндпоинт JWKS (JSON Web Key Set) — без компрометации ключа подписи. Параметр "alg": "none" сигнализирует о неподписанном токене без подписи вообще, что означает, что любой может подделать токены с произвольными утверждениями. Известная атака включает изменение заголовка алгоритма на "none" и удаление подписи. Серверы должны всегда проверять алгоритм по белому списку и отклонять неподписанные токены.
Правильная обработка истечения необходима для безопасности JWT. Приложения должны проверять утверждение "exp" при каждом запросе перед доверием токену. Когда токен истекает, токен обновления (хранимый безопасно, часто в httpOnly-куке) может использоваться для получения нового токена доступа без повторного входа пользователя. Короткие сроки жизни токенов доступа — обычно от 5 до 15 минут — ограничивают окно уязвимости при компрометации токена. Реализация упреждающего обновления токена до фактического истечения токена доступа предотвращает прерывания для пользователя в приложении.