Bearer-token

2 года назад

Ivan Gagarinov

Ответы

22

Bearer-токен — это тип авторизационного токена, который предоставляется пользователю после успешной аутентификации для доступа к защищенным ресурсам. Этот токен обычно представляет собой строку, которую пользователь должен передавать в заголовке HTTP-запроса для каждого запроса к защищенному сервису или приложению.

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

Bearer-токен обеспечивает простой механизм аутентификации и авторизации пользователей без необходимости использования cookies или сессий. Он является частью стандарта аутентификации OAuth 2.0 и широко используется во многих современных веб-приложениях и API.

Пример запроса:

GET /api/resource HTTP/1.1
Host: example.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvZSBEb2UiLCJhZG1pbiI6dHJ1ZSwiaWF0IjoxNTE2MjM5MDIyfQ.SdUMMAsFFk83SHyqGjfQ1pt8v_8t4WZku5Ty3CLMaH4

В данном примере Bearer token представлен в заголовке Authorization. Вместо значения Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvZSBEb2UiLCJhZG1pbiI6dHJ1ZSwiaWF0IjoxNTE2MjM5MDIyfQ.SdUMMAsFFk83SHyqGjfQ1pt8v_8t4WZku5Ty3CLMaH4 должен быть ваш актуальный Bearer-токен для доступа к защищенным ресурсам.

Обычно, чтобы получить этот токен, нужно сделать запрос на авторизацию, и в ответе приходит этот токен.

Пример запроса:

POST /login HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 52

{
    "username": "admin",
    "password": "admin"
}

Пример ответа:

{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvZSBEb2UiLCJhZG1pbiI6dHJ1ZSwiaWF0IjoxNTE2MjM5MDIyfQ.SdUMMAsFFk83SHyqGjfQ1pt8v_8t4WZku5Ty3CLMaH4","username":"admin"}

2 года назад

Ivan Gagarinov

0

Bearer-токен

Bearer-токен — это строка, которую клиент передаёт серверу, чтобы доказать, что он имеет право делать запрос. Дословно «bearer» — «предъявитель»: сервер доверяет любому, кто предъявил токен, без дополнительных проверок.

Как это работает

1. Клиент отправляет логин и пароль 2. Сервер проверяет их и возвращает токен 3. Клиент сохраняет токен 4. При каждом следующем запросе клиент передаёт токен в заголовке 5. Сервер проверяет токен и отдаёт данные

Пароль передаётся один раз. Дальше работает только токен.

Как передаётся в запросе

Токен передаётся в заголовке Authorization с префиксом Bearer:

GET /api/profile HTTP/1.1
Host: example.com
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo0Mn0.abc123

Как получить токен (Python)

import requests

# Шаг 1: получить токен
response = requests.post(
    "https://example.com/api/login",
    json={"username": "user@example.com", "password": "secret"}
)
token = response.json()["token"]

# Шаг 2: использовать токен в запросах
headers = {"Authorization": f"Bearer {token}"}

profile = requests.get("https://example.com/api/profile", headers=headers)
print(profile.json())

Что внутри токена

Чаще всего Bearer-токен — это JWT (JSON Web Token). Он состоит из трёх частей, разделённых точкой:

eyJhbGciOiJIUzI1NiJ9 ← заголовок (алгоритм подписи) .eyJ1c2VyX2lkIjo0Mn0 ← данные (user_id, срок жизни и др.) .SflKxwRJSMeKKF2QT4fwpMeJf ← подпись

Данные в JWT не зашифрованы — их можно прочитать. Но подделать нельзя: сервер проверяет подпись.

import base64
import json

def decode_jwt_payload(token: str) -> dict:
    payload = token.split(".")[1]
    # Добавляем отступ для base64
    padding = 4 - len(payload) % 4
    payload += "=" * padding
    return json.loads(base64.urlsafe_b64decode(payload))

token = "eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo0MiwiZXhwIjoxNzAwMDAwMDAwfQ.sig"
print(decode_jwt_payload(token))
# {"user_id": 42, "exp": 1700000000}

Где хранить токен

МестоУязвимостьРекомендация
localStorageXSS-атакиНе рекомендуется для чувствительных данных
sessionStorageXSS-атакиТолько на время сессии
httpOnly cookieCSRF-атакиЛучший вариант для веба
Память приложенияТеряется при перезагрузкеПодходит для мобильных приложений

Главные правила

  • Передавайте токен только по HTTPS — по HTTP его перехватят.
  • Устанавливайте срок жизни токена: час-два для чувствительных данных, до 30 дней для мобильных приложений.
  • Не храните токен в коде и не коммитьте в репозиторий.
  • При выходе пользователя — инвалидируйте токен на сервере или используйте чёрный список.

14 дней назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845