← Назад ко всем вопросам

Что такое JWT

1️⃣ Как кратко ответить

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

2️⃣ Подробное объяснение темы

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

Структура JWT

  1. Заголовок (Header):

    • Содержит информацию о типе токена и алгоритме подписи.
    • Пример:
      {
        "alg": "HS256",
        "typ": "JWT"
      }
      
    • Здесь alg указывает на алгоритм подписи (например, HMAC SHA256), а typ обозначает тип токена.
  2. Полезная нагрузка (Payload):

    • Содержит утверждения (claims), которые представляют собой данные, которые нужно передать.
    • Пример:
      {
        "sub": "1234567890",
        "name": "John Doe",
        "admin": true
      }
      
    • Утверждения могут быть стандартными (например, iss, exp, sub) или пользовательскими.
  3. Подпись (Signature):

    • Обеспечивает целостность и подлинность токена.
    • Создается путем кодирования заголовка и полезной нагрузки, а затем их шифрования с использованием секретного ключа.
    • Пример создания подписи:
      HMACSHA256(
        base64UrlEncode(header) + "." +
        base64UrlEncode(payload),
        secret)
      

Пример JWT

JWT может выглядеть следующим образом:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

Применение JWT

  • Аутентификация: После успешного входа пользователя сервер генерирует JWT и отправляет его клиенту. Клиент сохраняет токен и использует его для доступа к защищенным ресурсам, отправляя его в заголовке HTTP-запроса.
  • Обмен информацией: JWT может использоваться для безопасной передачи информации между сторонами, так как он подписан и может быть проверен на подлинность.

Преимущества JWT

  • Компактность: Благодаря кодированию в Base64, JWT легко передавать через URL, заголовки HTTP и в теле POST-запросов.
  • Самодостаточность: Вся необходимая информация для проверки токена содержится в самом токене.
  • Безопасность: Подпись обеспечивает целостность и подлинность данных.

Пример использования JWT в коде

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
​
public class JwtExample {
    public static void main(String[] args) {
        // Секретный ключ для подписи токена
        String secretKey = "mySecretKey";
​
        // Создание JWT
        String jwt = Jwts.builder()
            .setSubject("1234567890") // Устанавливаем идентификатор пользователя
            .setIssuedAt(new Date()) // Устанавливаем дату создания токена
            .setExpiration(new Date(System.currentTimeMillis() + 3600000)) // Устанавливаем срок действия токена (1 час)
            .claim("name", "John Doe") // Добавляем пользовательское утверждение
            .claim("admin", true) // Добавляем пользовательское утверждение
            .signWith(SignatureAlgorithm.HS256, secretKey) // Подписываем токен с использованием алгоритма HS256 и секретного ключа
            .compact(); // Генерируем компактное представление токена
​
        System.out.println("Generated JWT: " + jwt);
    }
}
  • Импортируем библиотеку JJWT: Она используется для создания и обработки JWT.
  • Определяем секретный ключ: Он используется для подписи токена.
  • Создаем JWT: Устанавливаем идентификатор пользователя, дату создания, срок действия и пользовательские утверждения.
  • Подписываем токен: Используем алгоритм HS256 и секретный ключ для подписи.
  • Выводим сгенерированный JWT: Токен можно использовать для аутентификации и передачи данных.

Тема: Безопасность
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки