Как тестировать механизмы авторизации?

«Как тестировать механизмы авторизации?» — вопрос из категории Тестирование безопасности, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Тестирование авторизации охватывает проверку механизмов контроля доступа, жизненного цикла токенов и обработки ошибок.

Области тестирования и примеры:

Механизм Что проверять
JWT / OAuth 2.0 Срок действия токена (exp), обновление (refresh token), корректность подписи, валидация claims.
RBAC (ролевая модель) Доступ к эндпоинтам/UI в зависимости от роли пользователя (например, admin vs user).
API-ключи Валидность ключа, ограничение по квотам (rate limiting), привязка к IP.

Пример теста на Python (JWT):

import requests
import jwt # PyJWT

def test_access_with_valid_jwt():
    # 1. Получение токена
    auth_response = requests.post("/auth/login", json={"user": "test", "pass": "secret"})
    access_token = auth_response.json()["access_token"]

    # 2. Проверка доступа к защищенному ресурсу
    headers = {"Authorization": f"Bearer {access_token}"}
    profile_response = requests.get("/api/profile", headers=headers)
    assert profile_response.status_code == 200

    # 3. Проверка обработки просроченного токена
    expired_payload = {"user_id": 1, "exp": 100} # Истекшее время
    expired_token = jwt.encode(expired_payload, "secret", algorithm="HS256")
    expired_response = requests.get("/api/profile", headers={"Authorization": f"Bearer {expired_token}"})
    assert expired_response.status_code == 401
    assert "token expired" in expired_response.json()["detail"]

Дополнительно тестируются: Защита от brute-force, SQL-инъекции в формах входа, корректность HTTP-кодов (401 Unauthorized, 403 Forbidden).