banner
Дом / Новости / Веб-токены JSON (JWT): ключи к их безопасному использованию
Новости

Веб-токены JSON (JWT): ключи к их безопасному использованию

Jul 13, 2023Jul 13, 2023

Несколько недель назад некоторые коллеги-разработчики выразили нам свою обеспокоенность по поводу создания веб-токенов JSON (JWT), которое они делали в рамках интеграции нового инструмента. Они слышали о «довольно многих» проблемах безопасности и хотели, чтобы мы помогли им проверить, были ли выпущенные токены правильными и соответствовали некоторым базовым требованиям безопасности.

В настоящее время мы работаем над проектом APICheck, помогающим автоматизировать тесты безопасности, который мы недавно опубликовали как «открытый исходный код». APICheck состоит из набора небольших инструментов, которые можно соединять между собой через каналы, чтобы иметь возможность связывать выполнение различных тестов по запросам к API, поэтому мы приступили к созданию инструмента, который позволил бы нам проверять выданные ими токены. , jwt -checker, в котором мы реализовали возможность прохождения валидаций, которые мы будем комментировать по токенам. Позже я покажу пример теста с использованием этого инструмента.

JWT (JSON Web Token) — это открытый стандарт (опубликованный в RFC 7519), который определяет компактный, автономный метод для инкапсуляции и безопасного обмена утверждениями о субъекте между различными сторонами с использованием объектов JSON. Содержимому токена можно доверять и проверять, если он имеет цифровую подпись (JWS, RFC 7515). Подпись может быть сгенерирована с использованием симметричных ключей (HMAC) или асимметричных ключей (RSA или ECDSA). Кроме того, JWT также могут содержать зашифрованные данные (JWE, RFC 7516) для защиты конфиденциальных данных, хотя токены этого типа не являются предметом данного исследования.

Важно отметить, что по умолчанию токены не зашифрованы, а строка, которую мы видим, представляет собой просто сериализацию с использованием кодировки base64url, которую можно легко декодировать, чтобы увидеть содержимое токена JSON в открытом виде.

Тогда ответ на первоначальный вопрос: «Это зависит…». Как и во многих других технологиях, JWT во многом зависит от конфигурации, используемой при генерации, а также от правильного использования и проверки токенов при потреблении.

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

Начнем с рассмотрения основных типов токенов и основных вариантов использования:

JWT обеспечивает безопасный обмен данными между сторонами более эффективно, чем другие стандарты (SAML), благодаря своему меньшему размеру, что делает его идеальным для следующих случаев использования:

Каждый вариант использования имеет своего получателя (клиентское приложение и службу API), но в случае одновременного контроля над обоими, для обоих случаев можно использовать один токен.

Ниже мы перечислим лучшие практики работы с JWT, сосредоточив внимание только на их генерации и проверке.

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

При выборе алгоритма подписи имейте в виду, что алгоритмы с симметричным ключом уязвимы для атак методом перебора, если используемый ключ недостаточно надежен (имена домашних животных и даты рождения для этого также недопустимы ;-), поэтому необходимо обеспечить достаточную сложность. если выбраны алгоритмы с симметричным ключом. С другой стороны, алгоритмы асимметричного ключа упрощают хранение ключа, поскольку он необходим только в той серверной части, которая генерирует токен.

Токен, однажды подписанный, действителен навсегда, если у него нет даты истечения срока действия (требования exp). В случае с «токенами доступа», если кто-то захватит один из них, он сможет навсегда получить доступ к разрешенной операции. Присвоение токенам идентификаторов (claim jti) позволяет их отзывать, в случае компрометации токена крайне желательно иметь возможность его отзыва.