• 401
  • 403
  • http status code
  • authorization
  • authentication

Код состояния HTTP 401 или 403? В чём разница между ошибками аутентификации и авторизации

Код 401 Unauthorized указывает, что клиент не аутентифицирован и требует корректных данных для доступа. Код 403 Forbidden означает, что клиент аутентифицирован, но не обладает достаточными правами для доступа к ресурсу.

Guamian
Guamian
Product & Design

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

Что такое коды состояния HTTP

Коды состояния HTTP подобны сигналам в разговоре между клиентом (например, вашим браузером или приложением) и сервером. Они предоставляют быстрые и чёткие обновления о том, что произошло при выполнении вашего запроса — прошло ли всё гладко, возникла ли ошибка или требуются дополнительные действия. Давайте сравним это с визитом в хорошо организованную пекарню:

200: Всё идеально

Вы просите круассан, пекарь улыбается, передаёт его и говорит: «Вот, пожалуйста!» Это HTTP 200 OK — запрос был успешным, и всё прошло так, как ожидалось.

Код состояния 200 OK — один из самых часто используемых кодов, который указывает, что запрос от клиента был успешно получен, понят и обработан сервером.

301: Мы переехали

Вы приходите в свою любимую пекарню, но там висит табличка: «Мы переехали на 123 Новый Улица». Это 301 Moved Permanently. Сервер говорит вашему браузеру автоматически перейти на новый адрес.

Код состояния 301 Moved Permanently HTTP указывает на то, что запрашиваемый ресурс был навсегда перемещён на новый URL. Этот код состояния информирует клиент (например, браузер или клиент API) обновить свои записи и использовать новый URL для будущих запросов.

404: Извините, это не здесь

Вы спрашиваете о шоколадном сконе, и пекарь говорит: «Мы не производим их здесь». Это 404 Not Found — ресурс, который вы ищете, не существует на сервере.

Код состояния 404 Not Found HTTP указывает на то, что сервер не смог найти запрашиваемый ресурс. Этот ответ означает, что запрос клиента был правильным, но сервер не смог обнаружить ресурс, который он попросил.

401: Кто вы?

Вы пытаетесь войти в VIP-зал, но охранник останавливает вас и говорит: «Вы должны показать свою членскую карту». Это 401 Unauthorized — требуется аутентификация, прежде чем вы сможете получить доступ к ресурсу.

Код состояния 401 Unauthorized HTTP указывает на то, что запрос клиента не был выполнен, так как ему не хватает действительных данных аутентификации. Сервер требует, чтобы клиент аутентифицировался для получения доступа к запрашиваемому ресурсу.

403: Не для вас

Вы показываете свою членскую карту, но охранник говорит: «Только платиновые члены могут войти». Это 403 Forbidden — вы аутентифицированы, но не обладаете необходимыми правами для доступа к ресурсу.

Код состояния 403 Forbidden HTTP указывает на то, что сервер понимает запрос клиента, но отказывается его выполнить, так как клиент не обладает необходимыми разрешениями. Это отличается от статуса 401 Unauthorized, так как клиент аутентифицирован (или запрос не требует аутентификации), но доступ к ресурсу явно запрещён.

500: Печь загорелась

Вы делаете заказ, но вдруг из кухни начинает валить дым. Пекарь говорит: «Мы не можем выполнить ваш заказ; что-то пошло не так внутри». Это 500 Internal Server Error — сервер столкнулся с неожиданной проблемой.

Код состояния 500 Internal Server Error HTTP указывает на то, что сервер столкнулся с неожиданным состоянием, которое помешало ему выполнить запрос. Это общий ответ об ошибке и не предоставляет конкретных деталей о том, что пошло не так.

503: Временно недоступен

Вы приходите в пекарню, но там висит знак «Закрыто на техобслуживание». Пекарня откроется позже. Это 503 Service Unavailable — сервер временно не может обработать ваш запрос, часто из-за перегрузки или технического обслуживания.

Код состояния 503 Service Unavailable HTTP указывает на то, что сервер временно не может обработать запрос. Это может быть связано с перегрузкой сервера, техническим обслуживанием или другими временными условиями. В отличие от 500 Internal Server Error, 503 подразумевает, что проблема ожидается к разрешению в ближайшее время.

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

Представьте их как профессиональные, стандартные сигналы в продолжающемся разговоре в интернете.

В этой статье я хочу сосредоточиться на ошибках 401 и 403, так как они тесно связаны с аутентификацией (AuthN) и авторизацией (AuthZ).

Когда использовать 401 Unauthorized?

401.png

Код состояния 401 Unauthorized HTTP используется, когда клиентский запрос требует аутентификации, но он отсутствует, недействителен или неудачен. Он сообщает клиенту, что ему необходимо аутентифицироваться, чтобы получить доступ к запрашиваемому ресурсу. Связь между аутентификацией и кодом состояния 401 Unauthorized заключается в роли аутентификации в определении того, может ли запрос продолжаться.

401 Unauthorized должен включать заголовок WWW-Authenticate, предоставляющий детали о том, как аутентифицироваться.

Итак, какие распространённые сценарии использования 401 Unauthorized?

  1. Отсутствует аутентификация

    Запрос не включает необходимые данные для аутентификации. Например: запрос к защищённой конечной точке API сделан без заголовка Authorization.

  2. Недействительные данные аутентификации

    Клиент предоставляет данные, но они неверны или не соответствуют тому, что ожидает сервер. Например, пользователь отправляет недействительный API-ключ или неправильно сформированный токен.

  3. Истёкший аутентификационный токен

    Аутентификационный токен действителен, но истёк, требуя у клиента повторной аутентификации. Например, JWT-токен с истёкшим сроком действия (утверждение exp).

  4. Отсутствует или неправильно сформированный заголовок авторизации

    Требуется заголовок авторизации, но он либо не предоставлен, либо неправильно оформлен.

  5. Неподдерживаемая схема аутентификации

    Сервер не поддерживает метод аутентификации, предоставленный клиентом. Например: клиент отправляет заголовок Basic-authentication, но сервер поддерживает только Bearer-токены.

  6. Недействительна сессия или отзывание токена

    Сессия пользователя была аннулирована, или его токен был отозван. Например: пользователь выходит из системы, но тот же токен используется для доступа к защищённому ресурсу.

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

Когда использовать 403 Forbidden?

403.png

Код состояния 403 Forbidden HTTP означает, что сервер понимает запрос и идентификатор клиента (если аутентифицирован), но отказывает в доступе из-за недостаточных прав. Он явно сигнализирует: «Вам не разрешено это делать», обеспечивая чёткие границы доступа и усиливая политику безопасности.

Различие между 401 Unauthorized и 403 Forbidden заключается в их ролях в контексте аутентификации и авторизации.

Авторизация — это отдельный механизм от аутентификации. Если аутентификация идентифицирует, кто вы, авторизация определяет, можете ли вы получить доступ к определённым ресурсам и какие действия вы можете выполнять с ними.

Чтобы ознакомиться с детальной разницей между AuthN и AuthZ, посмотрите следующие статьи.

Что такое AuthZ

Что такое AuthN

Итак, какие распространённые сценарии использования 403 Forbidden?

  1. Аутентифицирован, но без разрешений

    Клиент вошёл в систему или аутентифицирован, но у него нет необходимых прав или ролей. Например, пользователь с ролью «наблюдатель» пытается удалить файл, для чего требуются полномочия «редактора».

  2. Ограничен доступ к ресурсу

    Доступ к ресурсу намеренно ограничен определёнными пользователями или группами. Например: частный документ, поделённый с определёнными пользователями, доступ к которому получает кто-то, не находящийся в списке доступа.

  3. Блокировка по IP или геолокации

    IP-адрес клиента или его географическое положение заблокированы сервером. Например: пользователь из ограниченного региона пытается получить доступ к сервису, который работает только в определённых странах.

  4. Заблокированные действия по политике

    Клиент пытается совершить действие, запрещенное серверными политиками или правилами. Например: пользователь пытается изменить ресурс, помеченный как «только для чтения».

  5. Заблокированные статические ресурсы

    Сервер отказывает в доступе к определённым статическим файлам или директориям по соображениям безопасности.

    Пример: пользователь пытается получить доступ к файлу .htaccess или конфигурационному файлу сервера.

  6. Аккаунт приостановлен или отключен

    Аккаунт клиента отключён или заблокирован из-за нарушений или отсутствия активности. Например: пользователь с приостановленным аккаунтом пытается войти в систему или получить доступ к ресурсам.

  7. Действие требует повышенных разрешений

    Запрашиваемое действие требует особых полномочий (например, администратора или суперпользователя). Например: стандартный пользователь пытается получить доступ к конечным точкам, предназначенным только для администраторов.

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

Как я могу устранить ошибку 401 unauthorized

Ошибка 401 обычно указывает на то, что требуется аутентификация и она не удалась.

Проверьте учетные данные

Убедитесь, что заголовок Authorization присутствует и правильно оформлен, и проверьте правильность и неистечение срока действия учетных данных (ключа API, токена или пароля). Ввод неправильного имени пользователя или пароля — одна из наиболее частых причин ошибки 401.

Подтвердите метод аутентификации

Сервер может ожидать другой метод аутентификации, который предоставляется. Это может произойти, если клиент и сервер не согласованы по протоколу аутентификации. Используйте правильный метод (например, Basic, Bearer, API Key), указанный сервером, и проверьте правильность синтаксиса в заголовках.

Проверьте ответ сервера

Просмотрите тело ответа на детали об ошибке и обратите внимание на заголовок WWW-Authenticate для инструкций по аутентификации.

Проверьте запрос

Убедитесь в правильности конечной точки, параметров запроса и хоста и убедитесь, что ресурс, к которому вы пытаетесь получить доступ, требует аутентификации.

Проверьте проблемы с токеном

Расшифруйте и проверьте токен (например, с помощью https://logto.io/jwt-decoder) на предмет действительности, истечения срока действия и утверждений и убедитесь, что аудитория токена (aud) соответствует требованиям API.

Как я могу устранить ошибку 403 forbidden

Ошибка 403 forbidden обычно означает, что процесс авторизации был завершён, но доступ был отклонён. Чтобы устранить эту ошибку, учитывайте следующие условия:

Проверьте разрешения

Убедитесь, что ваш аккаунт, ключ API или токен имеет необходимые разрешения для ресурса. Проверьте, ограничен ли ресурс определёнными ролями или группами.

Убедитесь, что аутентификация верна

Убедитесь, что вы правильно аутентифицированы (например, имея действующий токен или учетные данные).

Дважды проверьте метод аутентификации, требуемый сервером.

Проверьте ресурс

Подтвердите наличие запрашиваемого ресурса и возможность доступ к нему. Если используете API, проверьте требования к конечной точке в документации.

Проверьте блокировку по IP или местоположению

Проверьте, не ограничен ли ваш IP-адрес или геолокация сервером.

Просмотрите политики сервера

Убедитесь, что запрашиваемое действие не нарушает серверные правила или политики (например, доступ к ресурсу только для чтения).

Проверьте ответ сервера

Изучите тело ответа на наличие деталей, объясняющих причину ошибки 403.

Может ли один запрос вернуть одновременно и 401, и 403 коды состояния

Нет, один HTTP-запрос не может одновременно вернуть коды состояния 401 Unauthorized и 403 Forbidden, так как HTTP-ответ может содержать только один код состояния.

Практическое использование кодов ошибок 401 и 403 в аутентификации и авторизации

В современном разработке приложений 401 Unauthorized и 403 Forbidden — это два кода состояния HTTP, с которыми разработчики часто сталкиваются. Хотя они могут показаться похожими, их значения и сценарии использования значительно различаются. Чтобы пояснить их различия, эта статья исследует практические примеры этих кодов в сценариях таких, как аутентификация, авторизация, мультиарендность и многофакторная аутентификация (MFA).

  1. Сценарий входа: пользователь пытается получить доступ к защищённой странице без входа в систему или предоставления корректных данных. Сервер отвечает и выдаёт ошибку 401 Unauthorized: «Вам необходимо войти в систему или предоставить корректные данные для доступа к этой странице.»
  2. Сценарий контроля доступа: тот же пользователь успешно входит в систему, но пытается получить доступ к странице, предназначенной только для администраторов, без необходимой роли администратора. Сервер отвечает и выдаёт ошибку 403 Forbidden: «Вы вошли в систему, но у вас нет разрешения для доступа к этой странице.»
  3. Сценарий многокоорпорации: пользователь входит в систему, но принадлежит Арендатору A и пытается получить доступ к ресурсу в Арендаторе B, где у него нет доступа. Сервер отвечает и выдаёт ошибку 403 Forbidden: «Вы аутентифицированы, но у вас нет разрешения для доступа к этому ресурсу в Арендаторе B.»
  4. Сценарий MFA: пользователь пытается войти в систему, но не завершил требуемую многофакторную аутентификацию (MFA). Сервер отвечает и выдаёт ошибку 401 Unauthorized: «Аутентификация незавершена. Пожалуйста, завершите MFA, чтобы продолжить.»

Использование Logto в качестве поставщика аутентификации и авторизации

Logto в первую очередь выступает поставщиком аутентификации, предлагая ключевые методы такие, как вход без пароля, электронная почта и пароль, MFA, корпоративное SSO и социальный вход, все основанные на открытых стандартах протоколов, таких как OIDC, OAuth 2.0 и SAML.

Logto Cloud также предоставляет ключевые функции для авторизации, включая Контроль доступа на основе ролей (RBAC), Организации (Мультиарендность) и Пользовательские утверждения токенов для удовлетворения различных потребностей в авторизации.