Разработка API: Зачем нужен заголовок Authorization: Bearer и как работает передача токена?
Заголовок Authorization: Bearer — это стандартный механизм передачи токена доступа между клиентом и сервером в рамках HTTP-запросов. Он является частью спецификации RFC 6750 и широко используется в связке с протоколом OAuth 2.0 и JWT (JSON Web Token).
## Зачем нужен заголовок Authorization: Bearer?
Когда пользователь или приложение проходит аутентификацию (например, вводит логин и пароль или использует OAuth), сервер выдаёт токен доступа — строку, подтверждающую право на выполнение определённых действий. Чтобы при каждом последующем запросе не передавать снова логин и пароль, клиент отправляет этот токен в заголовке HTTP-запроса.
Формат заголовка выглядит так:
Authorization: Bearer
Слово Bearer буквально означает «предъявитель» — тот, кто предъявляет токен, получает доступ к ресурсу. Это упрощает архитектуру: сервер не хранит сессии, а просто проверяет подпись и срок действия токена.
## Как работает передача токена?
1. **Аутентификация.** Клиент отправляет учётные данные на сервер авторизации (например, POST /auth/login). Сервер проверяет данные и возвращает access_token (и опционально refresh_token).
2. **Хранение токена.** Клиент сохраняет токен — обычно в памяти приложения, localStorage или httpOnly cookie (в зависимости от требований безопасности).
3. **Передача токена.** При каждом защищённом запросе клиент добавляет заголовок:
GET /api/user/profile
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…
4. **Проверка на сервере.** Сервер извлекает токен из заголовка, проверяет его подпись (для JWT), срок действия (exp) и права доступа (scope/claims). Если всё корректно — возвращает данные.
5. **Обновление токена.** Когда access_token истекает, клиент использует refresh_token для получения нового без повторной аутентификации.
## Почему именно заголовок, а не query-параметр?
Передача токена через URL (например, ?token=…) крайне нежелательна: URL логируется в серверных журналах, истории браузера, Referer-заголовках. Заголовок Authorization передаётся только в теле HTTP-запроса и не попадает в логи при правильной настройке.
## Безопасность Bearer-токенов
— Всегда используйте HTTPS — без него токен может быть перехвачен.
— Устанавливайте короткий срок жизни access_token (15–60 минут).
— Не храните токены в localStorage, если есть риск XSS-атак.
— Используйте httpOnly cookies для дополнительной защиты.
— Реализуйте механизм отзыва токенов (token revocation) при необходимости.
Заголовок Authorization: Bearer стал де-факто стандартом для REST API и микросервисной архитектуры благодаря простоте, масштабируемости и совместимости с современными стандартами безопасности.
