JavaRush /Курсы /Модуль 3: Django /JWT (JSON Web Tokens): основы и преимущества

JWT (JSON Web Tokens): основы и преимущества

Модуль 3: Django
18 уровень , 4 лекция
Открыта

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

Что такое JWT?

JSON Web Token (JWT) — это стандарт (RFC 7519) для создания токенов в формате JSON, которые можно использовать для передачи информации между сторонами. Эти токены основаны на цифровой подписи и шифровании, что делает их надежным методом аутентификации.

JWT состоит из трех основных частей, разделенных точками .:

  1. Header (Заголовок): указывает тип токена (обычно JWT) и алгоритм шифрования (например, HS256).
  2. Payload (Полезная нагрузка): содержит данные (например, пользовательский ID или роль). Эти данные не шифруются, поэтому они видны любой стороне.
  3. Signature (Подпись): проверяет подлинность токена. Она создается с использованием header + payload и секретного ключа.

Пример токена JWT:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.eyJ1c2VyX2lkIjoxMjMsInJvbGUiOiJ1c2VyIn0
.4P5NYRoQ9isGqwS8Gb0YvBRtk9dcbG6AzlvEl5jOYz4
Интересный факт:

если вы закодировали конфиденциальную информацию в payload и думаете, что она "безопасна", подумайте ещё раз! JWT не шифрует данные, а только подтверждает их подлинность.

Как работает JWT?

Механика JWT достаточно проста и состоит из следующих шагов:

  1. Идентификация и вход:

    • Пользователь вводит свои учетные данные (логин и пароль).
    • Сервер проверяет данные и, если они корректны, создаёт JWT.
    • Этот токен возвращается пользователю (обычно через HTTP-ответ).
  2. Использование токена:

    • При каждом запросе клиент отправляет JWT в заголовке HTTP (обычно в поле Authorization: Bearer <токен>).
    • Сервер проверяет токен. Если токен валиден, сервер считает пользователя аутентифицированным.
  3. Проверка токена:

    • Сервер расшифровывает токен, используя секретный ключ, и проверяет его подпись.
    • Если подпись корректна, сервер доверяет данным в payload.

Преимущества использования JWT

Теперь давайте разберемся, почему JWT стал таким популярным инструментом в разработке современных приложений.

  1. Безопасность. JWT использует криптографическую подпись (например, HMAC SHA-256). Это гарантирует, что никто не сможет подменить данные токена без знания секретного ключа. А если вы используете асимметричное шифрование (например, RSA), то даже сервер и клиент могут обмениваться токенами безопасно.

  2. Масштабируемость. В отличие от классической сессий на сервере, JWT хранится на стороне клиента (в localStorage, sessionStorage или cookie). Серверу не нужно сохранять состояние токена. Это упрощает работу в распределённых системах и уменьшает нагрузку на сервер.

  3. Простота использования. JWT передаются легко — это всего лишь строки. Они могут использоваться в заголовках HTTP, URL-параметрах или теле запросов.

  4. Гибкость. Токены JWT могут содержать любую информацию, которая вам нужна. Это позволяет передавать не только идентификатор пользователя, но и такие данные, как роли, права доступа и т.д.

Архитектурные преимущества JWT

Давайте сравним JWT с другими методами аутентификации. Для этого посмотрим на сценарии их использования:

Метод Где хранится состояние Безопасность Масштабируемость Пример использования
Сессии (Cookies) Сервер Высокая Сложно масштабировать Традиционные веб-приложения
Token Сервер Высокая Умеренно масштабируется Django TokenAuthentication
JWT Клиент Высокая (c HTTPS) Легко масштабируется Мобильные или Single Page Applications (SPA)

Сравнение JWT и традиционных токенов

Традиционные токены

  1. Каждый токен хранится на сервере (например, в базе данных или в кеше).
  2. Сервер должен проверять токен на каждом запросе, сравнивая его с оригиналом.
  3. Если токен необходимо отозвать, он удаляется с сервера.

JWT

  1. Серверу не нужно ничего хранить — токен самодостаточен.
  2. Подпись токена — это единственное, что требуется серверу для сверки.
  3. Чтобы отозвать JWT, сервер должен реализовать дополнительные механизмы (например, "черный список").

Когда использовать JWT?

JWT блестяще работает в следующих сценариях:

  • Single Page Applications (SPA): React, Vue или Angular приложения, взаимодействующие через API.
  • Мобильные приложения: приложения, которые должны работать автономно и сохранять авторизацию.
  • Микросервисная архитектура: когда несколько сервисов взаимодействуют друг с другом через API.

Однако не используйте JWT, если:

  • Вам важна возможность немедленного отзыва токенов (например, при изменении пароля).
  • Вы работаете с критически важными данными, которые не должны быть раскрыты даже временно.

Вопрос безопасности

JWT настолько безопасен, насколько вы его настроите. Вот несколько советов:

  1. Храните секретный ключ в безопасности. Если кто-то его узнает, он сможет создавать поддельные токены.
  2. Используйте HTTPS. Хотя JWT безопасен сам по себе, передача токена по HTTP делает его уязвимым для перехвата.
  3. Ограничьте срок действия токена. Чем короче "жизнь" токена, тем меньше шансов на его злоупотребление.
  4. Реализуйте механизмы отзыва токенов. Используйте черные списки или короткую жизнь токенов с возможностью обновления.

Пример JWT на практике

Header:

{
  "alg": "HS256",
  "typ": "JWT"
}

Payload:

{
  "user_id": 123,
  "role": "admin",
  "exp": 1700000000
}

Signature (созданная с помощью HMACSHA256(Header + Payload, secret_key)):

4P5NYRoQ9isGqwS8Gb0YvBRtk9dcbG6AzlvEl5jOYz4

Этот токен можно отправить серверу в заголовке HTTP:

Authorization: Bearer <токен>

Эти основные идеи и принципы открывают перед вами двери безопасной и масштабируемой аутентификации! Увидимся в следующей лекции, где мы погрузимся в реализацию JWT в вашем Django-приложении.

1
Задача
Модуль 3: Django, 18 уровень, 4 лекция
Недоступна
Создание JWT токена вручную
Создание JWT токена вручную
1
Задача
Модуль 3: Django, 18 уровень, 4 лекция
Недоступна
Расшифровка и верификация JWT токена
Расшифровка и верификация JWT токена
3
Опрос
Аутентификация и разрешения, 18 уровень, 4 лекция
Недоступен
Аутентификация и разрешения
Аутентификация и разрешения
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ