0Pricing
Cryptology Academy · Урок

Рекомендации по безопасной реализации JWT

Безопасно храните, обновляйте и отзывайте JWT в рабочих приложениях

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

Основной принцип

Безопасность JWT зависит от качества реализации. Спецификация гибкая, а гибкость создаёт уязвимости. Следуйте этим рекомендациям, чтобы избежать распространённых ошибок, которые приводили к обходу аутентификации в рабочих системах.

Фиксация алгоритма

Всегда явно указывайте ожидаемый алгоритм: jwt.decode(token, key, algorithms=["RS256"]). Никогда не считывайте алгоритм из заголовка токена, чтобы выбрать ключ или путь проверки. Это предотвращает атаки alg=none и смешение ключей.

Короткий срок действия и токены обновления

Токены доступа: 15–60 минут. Токены обновления: 7–30 дней, хранить в cookie-файлах httpOnly (не в localStorage). После истечения срока действия клиент использует токен обновления, чтобы получить новый токен доступа от сервера аутентификации без повторной аутентификации.

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

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

Хранение токенов

Токены доступа храните в памяти (переменной JS) — они удаляются при закрытии вкладки. Токены обновления храните в cookie-файлах httpOnly, Secure, SameSite=Strict — они недоступны JavaScript. Никогда не храните JWT в localStorage — XSS может похитить их.

Стратегия отзыва

JWT не сохраняют состояние — встроенного механизма отзыва нет. Варианты: поддерживать список отозванных токенов, который проверяется при каждом запросе; использовать очень короткий срок действия; использовать непрозрачные токены с централизованной проверкой в контекстах с высокими требованиями к безопасности.

Ротация ключей

Регулярно ротируйте ключи подписи. Публикуйте в JWKS несколько ключей с разными значениями kid. Во время ротации выпускайте новые токены с новым kid, оставляйте старый ключ активным, пока не истекут старые токены, а затем удаляйте старый ключ из JWKS.

Конфиденциальные данные в полезной нагрузке

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

Только HTTPS

Передавайте JWT только через HTTPS. Перехваченный через HTTP JWT позволяет полностью обойти аутентификацию. Устанавливайте для cookie флаг Secure. Используйте HSTS, чтобы предотвратить понижение протокола. Никогда не записывайте полные строки JWT в журналы сервера.

Выбор библиотеки

Используйте библиотеки с активной поддержкой: PyJWT 2+, python-jose, auth0/node-jsonwebtoken 9+, Nimbus JOSE + JWT (Java). Не реализуйте проверку JWT с нуля. Регулярно проверяйте базы данных CVE на наличие уязвимостей библиотек.

Тестирование

Проверяйте все векторы атак: отправляйте токен alg=none, токен со смешением RS256→HS256, истёкший токен, токен с неправильной аудиторией и изменённой полезной нагрузкой. Используйте jwt.io для создания тестовых токенов. Добавляйте интеграционные тесты, подтверждающие, что такие токены отклоняются с кодом 401.

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

Где следует хранить токены обновления в веб-приложении?

Итоги

Безопасное использование JWT требует фиксированных алгоритмов, короткого срока действия токенов доступа, хранения токенов обновления в cookie-файлах httpOnly, проверки аудитории и издателя, а также ротации ключей. Далее: схемы криптографического разделения секрета.

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

Урок «Рекомендации по безопасной реализации JWT» бесплатный?

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

Чему я научусь в уроке «Рекомендации по безопасной реализации JWT»?

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

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

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

Сколько времени занимает урок «Рекомендации по безопасной реализации JWT»?

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

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

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

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

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