Открыть сервисСервис

Bearer-токен

Bearer-токен — это строка символов, используемая в протоколе HTTP для аутентификации и авторизации запросов, которая передаётся в заголовке Authorization и не требует дополнительных доказательств владения (например, цифровой подписи). Термин происходит от английского bearer («предъявитель»): любой, кто предъявляет такой токен, получает доступ к ресурсам, которые он защищает. Bearer-токены широко применяются в современных веб-приложениях, API (интерфейсах программирования приложений) и распределённых системах, чаще всего в рамках протокола OAuth 2.0 и OpenID Connect.

История и происхождение

Концепция bearer-токенов возникла как развитие более ранних механизмов аутентификации, таких как HTTP Basic Auth (передача логина и пароля в открытом виде) и сессионные куки. В 2010 году рабочая группа IETF (Internet Engineering Task Force) опубликовала спецификацию OAuth 2.0 (RFC 6749), где bearer-токены были введены в качестве основного способа передачи прав доступа. Позднее, в 2012 году, был выпущен RFC 6750, который формализовал использование bearer-токенов в HTTP-запросах.

До появления OAuth 2.0 для аутентификации API часто использовались ключи доступа (API keys), которые передавались в URL или теле запроса. Bearer-токены стали более гибким решением, так как они могут содержать в себе информацию о правах доступа, времени действия и идентификаторе пользователя, а также могут быть легко отозваны или обновлены без изменения учётных данных клиента.

Устройство и формат

Bearer-токен представляет собой произвольную строку, которая может быть сгенерирована сервером авторизации. Формат токена не стандартизирован, но на практике часто используются два основных типа:

  • Обычные строки (opaque tokens) — случайные последовательности символов, например, eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.... Сервер хранит в своей базе данных связь между токеном и правами доступа. Такие токены не несут в себе информации о пользователе, а только служат ключом для поиска в хранилище.
  • JWT (JSON Web Token) — самодостаточные токены, закодированные в формате JSON и подписанные с помощью цифровой подписи (например, HMAC или RSA). JWT содержит три части: заголовок (тип токена и алгоритм подписи), полезную нагрузку (claims — утверждения, такие как sub — идентификатор субъекта, exp — время истечения, scope — права доступа) и подпись. Пример декодированного JWT:

`` { "sub": "1234567890", "name": "John Doe", "iat": 1516239022, "exp": 1516242622 } ``

Bearer-токен передаётся в HTTP-запросе в заголовке Authorization по схеме Bearer <токен>. Например: `` Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... ``

Применение

Bearer-токены используются в различных сценариях, где требуется безопасная аутентификация и авторизация без необходимости многократной передачи учётных данных пользователя.

Аутентификация в REST API

Большинство современных REST API (например, от сервисов Google, Microsoft, GitHub, Telegram) используют bearer-токены для проверки прав доступа. Клиент (веб-приложение, мобильное приложение или сервер) получает токен после успешного входа пользователя и затем включает его в каждый запрос к API. Сервер проверяет токен, извлекает из него идентификатор пользователя и права доступа, и на основе этого разрешает или запрещает операцию.

Протокол OAuth 2.0

В OAuth 2.0 bearer-токены являются основным типом access-токенов (токенов доступа). Процесс получения токена включает несколько шагов:

  1. Клиент запрашивает авторизацию у пользователя (например, через перенаправление на страницу входа).
  2. Пользователь предоставляет согласие.
  3. Сервер авторизации выдаёт клиенту bearer-токен.
  4. Клиент использует этот токен для доступа к защищённым ресурсам на сервере ресурсов.

Bearer-токены в OAuth 2.0 могут иметь ограниченное время жизни (обычно от нескольких минут до нескольких часов) и могут быть обновлены через refresh-токены (токены обновления).

OpenID Connect

OpenID Connect — это надстройка над OAuth 2.0, предназначенная для аутентификации пользователей. В этом протоколе bearer-токен (обычно JWT) используется как ID-токен, который содержит информацию о пользователе (например, имя, email, дату рождения). ID-токен подписывается сервером, что позволяет клиенту проверить его подлинность без обращения к серверу.

Преимущества и недостатки

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

  • Простота реализации: клиенту достаточно передать токен в заголовке, серверу — проверить его подпись или наличие в базе.
  • Гибкость: токены могут содержать произвольные данные (например, права доступа, срок действия, идентификатор сессии).
  • Масштабируемость: при использовании JWT сервер может проверять токен без обращения к базе данных, что снижает нагрузку и позволяет легко масштабировать систему.
  • Поддержка стандартов: bearer-токены широко поддерживаются библиотеками, фреймворками и облачными сервисами.

Недостатки

  • Уязвимость к перехвату: если токен будет перехвачен злоумышленником (например, при атаке «человек посередине» или через незащищённое соединение HTTP), он сможет использовать его для доступа к ресурсам. Для защиты необходимо использовать HTTPS (TLS).
  • Отсутствие встроенного механизма отзыва: если токен скомпрометирован, его сложно отозвать, особенно если он самодостаточный (JWT). Для решения этой проблемы используются чёрные списки токенов или короткое время жизни.
  • Размер: JWT-токены могут быть довольно большими (до нескольких килобайт), что увеличивает размер HTTP-запросов.
  • Необходимость безопасного хранения: токен должен храниться на клиенте в защищённом месте (например, в HttpOnly-куках или в защищённом хранилище браузера), чтобы предотвратить его кражу через XSS-атаки.

Безопасность

Использование bearer-токенов требует соблюдения ряда мер безопасности:

  • HTTPS: все запросы с токенами должны передаваться по защищённому соединению TLS, чтобы предотвратить перехват.
  • Короткое время жизни: токены должны иметь ограниченный срок действия (обычно не более 15–60 минут), чтобы минимизировать последствия утечки.
  • Refresh-токены: для долгосрочного доступа используются refresh-токены, которые хранятся на сервере и могут быть отозваны.
  • Защита от CSRF: при использовании токенов в браузере необходимо защищать приложение от межсайтовой подделки запросов (CSRF), например, с помощью SameSite-кук или дополнительных CSRF-токенов.
  • Проверка подписи: для JWT-токенов сервер должен проверять цифровую подпись, чтобы убедиться, что токен не был подделан.

Альтернативы

Существуют другие механизмы аутентификации, которые могут использоваться вместо bearer-токенов:

  • HTTP Basic Auth: передача логина и пароля в заголовке Authorization в кодировке Base64. Менее безопасен, так как требует постоянной передачи учётных данных.
  • Digest Access Authentication: использует хеширование пароля, но сложнее в реализации и редко применяется в современных API.
  • API-ключи: простые строковые ключи, передаваемые в URL или заголовке. Не поддерживают гибкое управление правами доступа.
  • MAC-токены (Message Authentication Code): требуют подписи каждого запроса, что повышает безопасность, но усложняет реализацию.

Примеры использования

  • GitHub API: для доступа к репозиториям и данным пользователя используется bearer-токен, который передаётся в заголовке Authorization: Bearer ghp_....
  • Google Cloud API: для вызова сервисов Google Cloud (например, Google Drive, Google Calendar) требуется bearer-токен, полученный через OAuth 2.0.
  • Telegram Bot API: боты используют bearer-токен, который выдаётся при создании бота через @BotFather. Токен передаётся в URL запроса, например: https://api.telegram.org/bot<токен>/sendMessage`.
  • Яндекс ID: для аутентификации пользователей в сервисах Яндекса используется bearer-токен, полученный через OAuth 2.0.

Интересные факты

  • Термин «bearer» был заимствован из финансовой сферы, где «bearer bond» (облигация на предъявителя) означает, что владелец документа имеет право на получение выплаты.
  • В спецификации OAuth 2.0 (RFC 6749) bearer-токены описываются как «токены, которые могут быть использованы любым, кто ими владеет», что подчёркивает их уязвимость.
  • В 2017 году была опубликована спецификация «DPoP» (Demonstration of Proof-of-Possession), которая предлагает улучшить безопасность bearer-токенов, требуя от клиента доказательства владения токеном через цифровую подпись запроса.

Источники

  • RFC 6749 — «The OAuth 2.0 Authorization Framework»
  • RFC 6750 — «The OAuth 2.0 Authorization Framework: Bearer Token Usage»
  • RFC 7519 — «JSON Web Token (JWT)»
  • OpenID Connect Core 1.0 Specification
  • «OAuth 2.0 in Action» — Justin Richer, Antonio Sanso (Manning Publications, 2017)
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru