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

В чем разница между ошибками 401 и 403?

1.6 Junior🔥 251 комментариев
#Тестирование API

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

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

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

Разница между HTTP ошибками 401 и 403

Оба статус-кода относятся к классу HTTP-кодов состояния клиентских ошибок (4xx) и связаны с доступом к ресурсам, но описывают принципиально разные ситуации. В основе различия лежит концепция аутентификации и авторизации.

HTTP 401 Unauthorized (Не авторизован)

Статус 401 Unauthorized указывает на то, что запрос не был применён, поскольку ему не хватает действительных учётных данных для аутентификации. Проще говоря, сервер говорит: "Я не знаю, кто ты. Представься, и тогда, возможно, я дам тебе доступ".

  • Суть проблемы: Отсутствие или недействительность аутентификации.
  • Ответ сервера: Обязательно включает HTTP-заголовок WWW-Authenticate, который указывает клиенту, какую схему аутентификации использовать (например, Basic или Bearer).
  • Аналогия из жизни: Попытка войти в здание. Сотрудник на проходной вас не узнаёт и просит предъявить пропуск (логин/пароль). У вас его нет или он нечитаем.
  • Типовой сценарий в веб-приложении:
    *   Попытка доступа к защищённому API без токена.
    *   Истёкший или некорректный JWT-токен.
    *   Ввод неправильного пароля в форме входа.

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

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="API", error="invalid_token", error_description="The access token is expired"
Content-Type: application/json

{
  "error": "invalid_token",
  "message": "Требуется аутентификация"
}

HTTP 403 Forbidden (Запрещено)

Статус 403 Forbidden означает, что сервер понял запрос и идентифицировал клиента (аутентификация прошла успешно), но отказывается его авторизовать для данного действия. Сервер говорит: "Я знаю, кто ты, но у тебя нет прав сделать это здесь".

  • Суть проблемы: Успешная аутентификация, но недостаточные права (отказ в авторизации).
  • Ответ сервера: Заголовок WWW-Authenticate, как правило, не отправляется, так как проблема не в аутентификации.
  • Аналогия из жизни: Вы предъявили пропуск сотрудника компании, но пытаетесь войти в комнату, доступную только для руководства. Вас знают как сотрудника, но прав на этот конкретный кабинет у вас нет.
  • Типовые сценарии:
    *   Пользователь с ролью "читатель" пытается удалить статью.
    *   Попытка доступа к админ-панели обычным пользователем.
    *   Доступ к файлу, на который у пользователя явно отозваны права (например, через `.htaccess` на Apache).

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

HTTP/1.1 403 Forbidden
Content-Type: application/json

{
  "error": "forbidden",
  "message": "У вас недостаточно прав для выполнения этого действия."
}

Сводная таблица различий

Критерий401 Unauthorized403 Forbidden
Ключевая причинаПровал аутентификации (не представился)Провал авторизации (не хватило прав)
ИдентификацияКлиент не идентифицирован или его учётные данные неверны.Клиент успешно идентифицирован.
Решение на стороне клиентаПредоставить/обновить учётные данные (логин/пароль, токен).Обратиться к администратору для получения нужных привилегий. Изменить учётную запись нельзя.
Заголовок ответаОбязательно WWW-AuthenticateОтсутствует (обычно)
БезопасностьСервер не раскрывает, существует ли запрашиваемый ресурс (если нет аутентификации).Сервер подтверждает существование ресурса авторизованному пользователю, но скрывает его содержимое.

Практическое значение для QA-инженера

Понимание этой разницы критически важно для:

  1. Корректного тест-дизайна: Создания отдельных тест-кейсов для проверки сценариев с неверным токеном (401) и сценариев, где у пользователя нет прав на эндпоинт (403).
  2. Анализа логов и баг-репортинга: Умения точно классифицировать ошибку. Если в ответе есть WWW-Authenticate — это явный признак 401. Если пользователь залогинен, но получает отказ — это 403.
  3. Проверки безопасности (Security Testing): Проверки механизмов контроля доступа. Например, убедиться, что обычный пользователь действительно получает 403 при попытке вызвать административный метод API, а не 200 OK или 401.
  4. Взаимодействия с разработчиками: Чёткой коммуникации: "Эндпоинт возвращает 403 для роли USER, хотя должен возвращать 401, так как токен истёк".

Таким образом, 401 — это вопрос "Кто ты?", а 403 — вопрос "Что тебе здесь разрешено?". Путаница между ними может привести к уязвимостям в системе безопасности или к неверному поведению клиентского приложения.

В чем разница между ошибками 401 и 403? | PrepBro