🌐 Cet article est en russe. Lire via Google Traduction →

Qu'est-ce que JWT

JWT (JSON Web Token) — это токен в формате JSON для авторизации. Состоит из трёх частей через точку:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NSIsIm5hbWUiOiJBbGljZSJ9.dozjgNryP4J3jVmNHl0w5N_XgL0n3I9PlFUP0THsR8U

Каждая часть — Base64-кодированный JSON:

Зачем нужен JWT

Stateless-авторизация: сервер не хранит сессии в памяти, а проверяет подпись токена. Горизонтально масштабируется — любой сервер может проверить токен (если знает secret).

Использование

GET /api/user/profile
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NSJ9.SflKxw...

Algorithmes de signature

OAuth 2.0

OAuth 2.0 — протокол авторизации. Позволяет дать приложению доступ к вашим данным на другом сервисе без передачи пароля.

Сценарий: «Войти через Google»

  1. Вы нажимаете «Войти через Google» в приложении X.
  2. Приложение X перенаправляет вас на Google: «Дай мне доступ к email и имени».
  3. Google спрашивает: «Приложение X хочет знать ваш email. Разрешить?» Вы нажимаете «Да».
  4. Google перенаправляет вас обратно в приложение X с authorization code.
  5. Приложение X обменивает code на access token (на сервере, не в браузере).
  6. Приложение X использует access token для запросов к Google API от вашего имени.

Гранты (flows)

JWT contre OAuth 2.0

JWTOAuth 2.0
Формат токенаПротокол авторизации
Что выглядит токенКак выдать токен
Можно без OAuthМожно с другим форматом
СамодостаточенОписывает process

Они часто работают вместе: OAuth 2.0 выдаёт JWT в качестве access token. RFC 9068 (JWT Profile for OAuth 2.0) стандартизирует это.

Jeton d'accès vs jeton d'actualisation

Access TokenRefresh Token
Короткоживущий (5-60 мин)Долгоживущий (дни-месяцы)
Используется для запросовТолько для обмена на новый access
Хранится в памяти / httpOnly cookieХранится в httpOnly cookie / secure storage
Можно отозвать сразу (если access token в deny-list)Можно отозвать — истекут все access tokens пользователя

Без refresh token: пользователь логинится каждый час. С refresh token — раз в месяц.

Où stocker JWT sur le client

МестоSécuritéУдобство
localStorage❌ Уязвимо к XSSПросто
sessionStorage❌ Уязвимо к XSSСредне
httpOnly cookie✅ Защищено от JS, ⚠️ CSRFПросто
В памяти (React state)✅ Защищено от XSSТеряется при F5
Service Worker✅ ХорошоСложно

Оптимально: access token в памяти, refresh token в httpOnly cookie. Или: оба в httpOnly cookie с SameSite=Strict + CSRF-токен.

Vulnérabilités typiques

FAQ

Что такое JWT? JWT (JSON Web Token) — это токен в формате JSON, используемый для авторизации в API. Выглядит как три блока через точки: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NSJ9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c. Внутри — header (алгоритм), payload (данные о пользователе), signature (подпись). Используется для stateless-авторизации: сервер не хранит сессии, а проверяет подпись токена.

Что такое OAuth 2.0? OAuth 2.0 — это протокол авторизации, позволяющий дать третьему приложению доступ к вашим данным на другом сервисе без передачи пароля. Например: «Разрешить приложению Todoist читать мои задачи в Google Calendar». Не передаёт пароль — выдаёт временный токен. Используется для: входа через Google/Apple/Facebook, доступа приложений к API, делегирования прав.

Чем отличается JWT от OAuth 2.0? JWT — это формат токена (как выглядит). OAuth 2.0 — это протокол авторизации (как выдать токен). Они часто используются вместе: OAuth 2.0 авторизует, JWT — формат access token. Можно использовать JWT без OAuth (просто выдавать токены при логине). Можно использовать OAuth с другими форматами токенов (random opaque strings).

Что такое refresh token? Refresh token — это долгоживущий токен (дни, недели, месяцы), который используется для получения нового access token без повторного логина. Access token короткоживущий (5-60 минут) для безопасности. Когда access token истекает — клиент отправляет refresh token на /token endpoint и получает новую пару. Если refresh token украли — можно отозвать все access tokens пользователя.

Где хранить JWT на клиенте? НЕ в localStorage (уязвимо к XSS). Лучшие варианты: 1) httpOnly cookie — защищён от XSS, но уязвим к CSRF (нужна CSRF-защита). 2) В памяти приложения (React/Vue state) — безопасно от XSS, но теряется при перезагрузке. 3) Service Worker / Web Worker. Оптимально: access token в памяти, refresh token в httpOnly cookie.

Что такое Bearer token? Bearer token — это тип токена авторизации в HTTP. В заголовке Authorization: 'Bearer eyJhbGciOi...'. Любой, кто знает токен, может им воспользоваться. Стандарт RFC 6750. Используется в OAuth 2.0, JWT, простых API-ключах. Защита: HTTPS, хранение в безопасном месте, ротация.

👉 API документация → — примеры использования токенов в нашем API.