← Назад ко всем вопросам
Что такое JWT
1️⃣ Как кратко ответить
JWT (JSON Web Token) — это компактный, URL-безопасный способ передачи информации между сторонами в виде JSON-объектов. Он используется для аутентификации и передачи данных, обеспечивая целостность и подлинность информации с помощью цифровой подписи.
2️⃣ Подробное объяснение темы
JWT (JSON Web Token) — это стандарт для создания токенов доступа, которые могут быть использованы для передачи информации между двумя сторонами. JWT состоит из трех частей: заголовка, полезной нагрузки и подписи, которые кодируются в Base64 и соединяются точками.
Структура JWT
-
Заголовок (Header):
- Содержит информацию о типе токена и алгоритме подписи.
- Пример:
{ "alg": "HS256", "typ": "JWT" } - Здесь
algуказывает на алгоритм подписи (например, HMAC SHA256), аtypобозначает тип токена.
-
Полезная нагрузка (Payload):
- Содержит утверждения (claims), которые представляют собой данные, которые нужно передать.
- Пример:
{ "sub": "1234567890", "name": "John Doe", "admin": true } - Утверждения могут быть стандартными (например,
iss,exp,sub) или пользовательскими.
-
Подпись (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: Токен можно использовать для аутентификации и передачи данных.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться