Где в запросе передаётся токен авторизации?
Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
Место передачи токена авторизации в запросе
В контексте веб-разработки и тестирования 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, мы должны гарантировать, что реализация соответствует лучшим практикам безопасности и документации.