Карта / Spring Security / JWT и OAuth2

JWT и OAuth2

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

header eyJhbGciOiJIUzI1NiJ9 алгоритм подписи . payload {"sub":"artur","role":"ADMIN"} id пользователя, роли, exp . signature SflKxwRJSMeKKF2QT4..... HMAC(header.payload, secret)

Три части: header (алгоритм подписи), payload (данные — id пользователя, роли, срок действия), signature (подпись, чтобы никто не подделал содержимое).

// клиент отправляет токен в каждом запросе
GET /api/orders
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9...

Сервер не хранит сессии — просто проверяет подпись токена и достаёт из него нужные данные. Это и называется stateless аутентификация — сервер ничего не “помнит” между запросами.

Копнуть глубже

JWT vs сессионные куки:

Сессия + кукиJWT
Где хранится состояниена серверевнутри самого токена
Масштабированиенужна общая сессия между серверами (или sticky session)любой сервер сам проверит токен, не нужно общее хранилище
Отзыв до истеченияпросто — удалить сессию на сервересложнее — токен валиден, пока не истечёт (если не вести чёрный список)

OAuth2 — протокол для делегирования доступа третьим лицам, классический пример — «Войти через Google». Пользователь логинится не на твоём сайте, а у Google, который выдаёт твоему серверу токен, подтверждающий личность пользователя, без передачи пароля от Google твоему приложению.

Access token и refresh token — разделение по времени жизни: короткоживущий access token (используется для запросов, истекает быстро — минимизирует ущерб при краже) и долгоживущий refresh token (используется только для получения нового access token, не для прямых запросов к API). Подробнее — в теме «Access / refresh».

🎤 Закрыл тему, если можешь объяснить:
• что такое JWT и почему это stateless подход;
• разницу JWT и сессионных куки, и идею OAuth2 (если дошёл до 3-го слоя).