Декодирование JWT

Читает токен, проверяет подпись или подписывает пробный токен в браузере. HMAC, RSA и ECDSA. Токен не отправляется. Адрес JWKS запрашивается только по вашей кнопке.

Токен

Заголовок Нагрузка Подпись

Адрес JWKS

Проверить по JWKS читает этот адрес в браузере и скачивает только ключи. Токен остаётся на странице. Адрес должен пускать запрос браузера.

Проверка

    Подпись

    Прочитать токен, проверить или подписать пробный

    JWT — это три части в Base64url: заголовок, нагрузка и подпись. Заголовок и нагрузка — это JSON, они не зашифрованы. Кто имеет токен, тот их читает. Подпись показывает, что нагрузку не меняли, если у вас есть секрет HMAC или открытый ключ. Эта страница читает, проверяет и собирает токен в браузере. Она отмечает alg none, отсутствующий или уже наступивший exp, время в миллисекундах и секрет HMAC короче 32 байт. Токен не отправляется. Контрольная сумма на странице хеша — не подпись JWT. exp — это Unix-время в секундах; другие пояса смотрите на странице метки Unix.

    Как пользоваться

    1. Токен слева. Справа Заголовок и Нагрузка — две вкладки. При включённом Считать по мере ввода заполняются оба поля. Время под нагрузкой — местное время этого компьютера. Запаса нет: если exp сейчас или раньше, он истёк.
    2. Показать пример кладёт токен HS256 с нагрузкой {"sub":"user-1"} и секрет HMAC secret. Секрет в Base64 остаётся выключенным. Проверить сообщает, что подпись совпадает. Проверка говорит, что секрет из 6 байт и что нет exp. Пример короткий нарочно.
    3. Проверить смотрит поле токена, а не несохранённые правки в Заголовке или Нагрузке. HS256, HS384 и HS512 используют секрет HMAC. RS, PS и ES используют пару под Алгоритмом: открытый ключ проверяет, закрытый подписывает. Создать ключ заполняет оба. Собрать JWT строит новый токен из этих двух полей. Меню Алгоритм важнее alg, записанного в заголовке.
    4. Срок сначала стоит на Не менять поля, поэтому Собрать JWT не трогает iat и exp. Выберите 1 час, и Собрать JWT запишет оба в секундах от текущего момента. Шаблон Пользователь заполняет sub 1234567890, name John Doe и email [email protected]. Доступ заполняет sub user-1 и scope read.
    5. Копировать под токеном копирует токен. Копировать у Заголовка или Нагрузки копирует это поле. Проверить по JWKS читает адрес JWKS в этом браузере и скачивает только ключи. Токен не отправляется. Очистить всё очищает токен, оба JSON, секрет, ключ и адрес.

    Что проверяется

    HS256, HS384 и HS512 используют секрет. Короче 32 байт подпись всё равно ставится, а Проверка предупреждает. Отмечайте Секрет в Base64 только если секрет и есть Base64. RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384 и ES512 используют PEM или JWK. Открытый ключ проверяет. Закрытый ключ PKCS#8 собирает токен. Закрытый ключ RSA тоже может проверять, потому что открытая половина внутри него. Можно вставить SPKI (BEGIN PUBLIC KEY), PKCS#8 (BEGIN PRIVATE KEY) или RSA PKCS#1. Сертификат отклоняется. Ключ EC с BEGIN EC PRIVATE KEY тоже; экспортируйте PKCS#8. alg none никогда не считается действительным. Проверить следует alg из заголовка. Секрет HMAC не используется для проверки RSA. exp, nbf и iat — это секунды. Число из 13 цифр отмечается, но не переводится. JWKS — это набор ключей или один JWK. Несколько ключей без kid — ошибка. Массив в Заголовке или Нагрузке останавливает Собрать JWT.

    Когда это нужно

    • Прочитать sub и exp в токене, который у вас уже есть.
    • Подписать локальный HS256 для сервера, чей секрет вы задали сами.
    • Проверить RS256 открытым PEM или адресом JWKS, который пускает браузер.
    • Увидеть, что пробный секрет короткий, до того как он попадёт в конфиг.

    Вопросы

    Нагрузка зашифрована?

    Нет. Это Base64url. Не кладите туда пароль, номер документа или карты.

    Почему Проверить не проходит?

    В токене нужны две точки и две части JSON. alg в заголовке должен быть из тех, что знает эта страница. Для HS нужен тот же секрет, что при подписи, и Секрет в Base64 должен совпадать с тем, как секрет хранится. RSA и EC хотят открытый ключ, не сертификат. Прошедший exp — это предупреждение в Проверке, а не несовпадение подписи.

    HS256 или RS256?

    HS256 — один общий секрет. RS256 подписывает закрытым ключом и проверяется открытым. Не отдавайте секрет HMAC другому сервису. Отдайте открытый ключ.

    Что такое alg none?

    Заголовок говорит, что подписи нет. Эта страница не сочтёт такой токен действительным.

    Можно ли здесь отозвать утёкший токен?

    Нет. Сократите exp на сервере, который выдаёт токены, или ведите там список отзыва.

    Можно ли вставлять токен сюда?

    Проверка остаётся в браузере. Проверить по JWKS — единственный запрос, и он скачивает ключи, а не ваш токен. Всё равно не вставляйте действующий рабочий токен на общем компьютере. Если время кажется сдвинутым на несколько часов, число — это UTC, а строка под нагрузкой — часы этого компьютера.