0Pricing
Cryptology Academy · Урок

Устройство JWT: заголовок, полезная нагрузка, подпись

Декодируйте части в формате base64url и разберитесь с каждым полем JWT

«Устройство JWT: заголовок, полезная нагрузка, подпись» — бесплатный урок Cryptology Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cryptology Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cryptology Academy содержит 4 уроков всего.

Что такое JWT?

JSON Web Token (JWT) — это компактный безопасный для URL формат токенов, определённый в RFC 7519. Он кодирует утверждения (заявления о субъекте) и криптографическую подпись в одной строке, обеспечивая аутентификацию без состояния.

Структура из трёх частей

JWT имеет форму: base64url(header).base64url(payload).base64url(signature). Точка разделяет части. Заголовок и полезная нагрузка читаемы (base64url, а не зашифрованы). Криптографической является только подпись.

Заголовок

Заголовок представляет собой объект JSON: {"alg":"HS256","typ":"JWT"}. alg задаёт алгоритм подписи (HS256, RS256, ES256, none). typ всегда имеет значение "JWT". Дополнительные заголовки включают kid (идентификатор ключа) для выбора ключа.

Полезная нагрузка и утверждения

Стандартные зарегистрированные утверждения: iss (издатель), sub (субъект), aud (аудитория), exp (время истечения в формате временной метки Unix), nbf (не ранее), iat (время выпуска), jti (идентификатор JWT для отзыва). Пользовательские утверждения — это любые дополнительные пары ключ-значение.

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

import base64, json token = "eyJ..." parts = token.split(".") header = json.loads(base64.urlsafe_b64decode(parts[0]+"==")) payload = json.loads(base64.urlsafe_b64decode(parts[1]+"==")) print(header, payload)

Проверка подписи

Для HS256: HMAC-SHA256(base64url(header)+"."+base64url(payload), secret). Получатель пересчитывает это значение и сравнивает его с частью подписи. Если значения совпадают и срок действия токена не истёк, токен действителен.

Асимметричные подписи

Для RS256 закрытый ключ подписывает строку header.payload с использованием RSA-SHA256. Любая сторона, располагающая открытым ключом, может проверить подпись без закрытого ключа. Открытые ключи распространяются через конечные точки JWKS (JSON Web Key Set), например /.well-known/jwks.json.

Кодирование Base64url

Base64url заменяет + на -, а / на _, и удаляет дополнение =. Благодаря этому JWT безопасно использовать в URL, заголовках HTTP и файлах cookie без процентного кодирования. Исходные байты по-прежнему не зашифрованы — они только закодированы.

JWT по умолчанию не зашифрованы

Полезная нагрузка JWT видна всем, кто декодирует её из base64url. Никогда не помещайте секреты (пароли, номера социального страхования) в полезную нагрузку JWT, если только не используете JWE (JSON Web Encryption) с алгоритмом "enc" для настоящего шифрования.

Срок действия токена

Задавайте для exp короткий срок действия (15–60 минут для токенов доступа). Долгоживущие JWT повышают риск: если их украдут, они остаются действительными до истечения срока действия. Используйте токены обновления, хранящиеся безопасно, чтобы выдавать новые краткосрочные токены доступа.

Обнаружение JWKS

Поставщики аутентификации (Auth0, Keycloak, Google) публикуют URL JWKS. Проверяющая сторона получает открытые ключи по kid, кэширует их и проверяет подписи без обращения к издателю для каждого запроса. При смене ключей обновляется конечная точка JWKS.

Быстрая проверка

Какая часть JWT содержит криптографическую подпись?

Итоги

JWT состоит из трёх частей JSON, закодированных в base64url: заголовка (алгоритм), полезной нагрузки (утверждения) и подписи. Полезная нагрузка читаема и не зашифрована. Далее: выбор между HS256 и RS256.

Часто задаваемые вопросы

Урок «Устройство JWT: заголовок, полезная нагрузка, подпись» бесплатный?

Да — полный текст урока «Устройство JWT: заголовок, полезная нагрузка, подпись» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cryptology Academy, подпишись на CoddyKit PRO. Курс Cryptology Academy содержит 4 уроков всего.

Чему я научусь в уроке «Устройство JWT: заголовок, полезная нагрузка, подпись»?

Декодируйте части в формате base64url и разберитесь с каждым полем JWT Ты практикуешь Cryptology Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Cryptology Academy?

Предыдущий опыт не требуется. Cryptology Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Устройство JWT: заголовок, полезная нагрузка, подпись»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Cryptology Academy?

Да. Каждый урок Cryptology Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Устройство JWT: заголовок, полезная нагрузка, подпись
  2. HS256 и RS256: симметричные и асимметричные JWT
  3. Уязвимости JWT: alg=none и путаница ключей
  4. Рекомендации по безопасной реализации JWT
← Назад к Cryptology Academy