← Назад к вопросам

Где в запросе передаётся токен авторизации?

1.6 Junior🔥 232 комментариев
#Тестирование API#Клиент-серверная архитектура

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Место передачи токена авторизации в запросе

В контексте веб-разработки и тестирования API, токен авторизации может передаваться в HTTP-запросе через несколько основных механизмов. Выбор места передачи зависит от типа токена (например, JWT, OAuth Token, API Key) и используемого протокола безопасности. Как QA Engineer, понимание этих мест критически важно для корректного тестирования авторизации и безопасности endpoints.

Основные места передачи токена

1. HTTP заголовок Authorization

Самый распространённый способ — использование заголовка Authorization. Токен передаётся в его значении, часто с указанием схемы авторизации.

GET /api/users/profile HTTP/1.1
Host: example.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Распространённые схемы:

  • Bearer token: Для JWT и OAuth 2.0 (Authorization: Bearer <token>).
  • Basic auth: Для имени пользователя и пароля (Authorization: Basic base64(login:password)).
  • API Key: иногда используется схема ApiKey или просто передача ключа (Authorization: ApiKey <key>).

2. Пользовательские заголовки

В некоторых API, особенно legacy или с специфичными требованиями безопасности, токены передаются в пользовательских заголовках.

GET /api/data HTTP/1.1
Host: example.com
X-Api-Token: abc123def456ghi789
X-Access-Key: key_value_here

3. Query parameters (параметры URL)

Токен может быть передан как часть URL, в виде query параметра. Этот метод считается менее безопасным, так как токен может попасть в лог-файлы сервера, браузерной истории и становится видимым в ссылках.

GET /api/orders?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... HTTP/1.1
Host: example.com

4. Тело запроса (Body)

Для методов запроса, которые поддерживают тело (например, POST, PUT, PATCH), токен может передаваться в формате JSON, XML или form-data.

{
  "auth_token": "your_token_value_here",
  "query_data": {
    "page": 1
  }
}

5. Cookies

В веб-приложениях токен часто хранится и передаётся автоматически браузером в заголовке Cookie. Это характерно для сессионных токенов.

GET /dashboard HTTP/1.1
Host: example.com
Cookie: session_id=abc123def456ghi789; auth_token=your_token_value

Критические рекомендации для QA по проверке передачи токена

При тестировании API, связанных с авторизацией, необходимо:

  • Проверить все возможные места передачи: Убедиться, что API корректно обрабатывает токен из ожидаемого места (например, только из заголовка Authorization), и игнорирует его из других (например, из query параметра), если это требуется политикой безопасности.
  • Тестирование безопасности: Особое внимание уделить передаче через query parameters, так как это потенциальная уязвимость. Проверить, что такие запросы не принимаются или токен в URL не логгируется.
  • Валидация формата токена: Проверить, что API возвращает корректные ошибки (например, 401 Unauthorized или 403 Forbidden) при передаче токена в неверном формате, с неверной схемой или в неправильном месте.
  • Проверка на отсутствие токена: Убедиться, что endpoints, требующие авторизации, возвращают ожидаемый статус ошибки при полном отсутствии токена в запросе.
  • Анализ документации API: В спецификации API (например, Swagger/OpenAPI) должно быть четко указано, где и как передавать токен. QA должен проверить соответствие реализации документации.

Пример теста для проверки передачи токена в заголовке

import requests

def test_auth_with_bearer_token():
    base_url = "https://api.example.com"
    endpoint = "/secure-data"
    valid_token = "your_valid_jwt_token_here"
    
    # Корректный запрос с токеном в заголовке Authorization
    headers = {"Authorization": f"Bearer {valid_token}"}
    response = requests.get(f"{base_url}{endpoint}", headers=headers)
    assert response.status_code == 200
    
    # Запрос с токеном в неправильном месте (query параметр) должен быть отвергнут
    params = {"access_token": valid_token}
    response_with_query_token = requests.get(f"{base_url}{endpoint}", params=params)
    assert response_with_query_token.status_code == 401  # Unauthorized
    
    # Запрос без токена должен быть отвергнут
    response_no_token = requests.get(f"{base_url}{endpoint}")
    assert response_no_token.status_code == 401

Выбор места передачи токена — это баланс между удобством, особенностями клиента (браузер, мобильное приложение) и требованиями безопасности. Как QA Engineer, мы должны гарантировать, что реализация соответствует лучшим практикам безопасности и документации.