hostprofi.ru
Подобрать хостинг
Термин·буква B

Bearer-токен

краткое определение

Bearer-токен — строка авторизации, передаваемая в HTTP-заголовке Authorization: Bearer. Владелец токена получает доступ к ресурсу без дополнительной проверки личности — достаточно предъявить токен.

Bearer-токен (от англ. "bearer" — предъявитель) — тип токена доступа, где любой, кто владеет строкой токена, получает права, закодированные в ней. Сервер не проверяет, кто именно предъявляет токен — только его подлинность и срок действия. Схема определена в OAuth 2.0 (RFC 6750, октябрь 2012).

Как работает Bearer-токен

Клиент включает токен в заголовок каждого HTTP-запроса:

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyXzQyIiwiZXhwIjoxNzE5Mzk4NDAwfQ.signature

Сервер проверяет подпись токена и срок действия (exp-claim). Если токен валиден — возвращает ресурс. Если истёк — отвечает 401 Unauthorized с заголовком WWW-Authenticate: Bearer error="invalid_token". Если отсутствует — 401 с WWW-Authenticate: Bearer realm="API".

Чаще всего bearer-токены реализуются как JWT (JSON Web Token, RFC 7519). JWT состоит из трёх частей, закодированных в Base64url и разделённых точками: заголовок (алгоритм подписи), полезная нагрузка (claims: sub, exp, iat, roles) и подпись. Сервер проверяет подпись публичным ключом без обращения к базе данных.

Виды Bearer-токенов

  • Opaque token — случайная строка (UUID или Base64-encoded bytes). Сервер проверяет через базу данных или endpoint интроспекции (POST /oauth/introspect). Легко отозвать, но требует хранилища и дополнительного HTTP-запроса на каждую проверку.
  • JWT — самодостаточный токен с подписью. Сервер проверяет без обращения к базе. Отозвать сложнее — нужен token blocklist или уменьшение срока жизни.
  • Access token + refresh token — access token живёт 15–60 минут (короткий срок снижает ущерб при краже), refresh token — дни или недели. При истечении access token клиент использует refresh token для получения нового без повторного логина.

Bearer-токены vs другие методы авторизации

МетодПередачаБезопасностьПрименение
Basic Authlogin:password в каждом запросеНизкая (пароль в каждом запросе)Внутренние API, legacy
Bearer token (JWT)Заголовок AuthorizationВысокая при HTTPS + короткий expREST API, SPA, мобильные приложения
API KeyЗаголовок или параметр URLСредняя (не истекает)Серверные интеграции
OAuth 2.0 + PKCEBearer token через code flowВысокаяАвторизация сторонних приложений

История

До OAuth 2.0 API-авторизация строилась на Basic Auth или OAuth 1.0a — сложной схеме с подписью каждого запроса через HMAC-SHA1. RFC 6749 и RFC 6750, опубликованные в октябре 2012 года, ввели упрощённую схему bearer-токенов. RFC 7519 (JWT, 2015) формализовал наиболее распространённый формат. OAuth 2.1 (2023) включил bearer-токены как обязательный элемент и запретил implicit flow.

Безопасность в хостинге

Bearer-токены передавать только по HTTPS — перехваченный токен даёт полный доступ без дополнительной аутентификации. Срок жизни access token — не более 1 часа. Хранить в памяти приложения (JS-переменная), не в localStorage (уязвим к XSS) и не в cookie без httpOnly и Secure флагов. Bearer-токены используются в REST API всех крупных хостинг-панелей: Hetzner Cloud API, DigitalOcean API, Plesk API, ISPmanager API. Для серверных скриптов Python-автоматизации токены хранить в переменных окружения, не в коде: TOKEN = os.environ["HETZNER_API_TOKEN"].

OAuth 2.0 flows и Bearer-токены

Bearer-токены получаются через разные OAuth 2.0 flows в зависимости от сценария:

  • Authorization Code + PKCE — для веб-приложений и мобильных клиентов. Пользователь логинится через IdP (Google, Keycloak), получает code, обменивает на access + refresh token.
  • Client Credentials — для серверных M2M-интеграций без пользователя. Сервер авторизуется своим client_id + client_secret и получает access token. Используется для автоматических API-запросов к хостинг-провайдерам.
  • Device Code — для устройств без браузера (CLI, IoT). Пользователь авторизуется на другом устройстве.

Проверка JWT без обращения к серверу: jwt.decode(token, PUBLIC_KEY, algorithms=["RS256"]) — декодирование и проверка подписи занимает менее 1 мс на стороне сервиса.

Другие термины