Вы открываете сайт и видите белый экран с надписью «401 Unauthorized» или «Authorization Required». Или ваше приложение неожиданно перестаёт работать с API и возвращает статус 401. В обоих случаях смысл один: сервер говорит «я тебя не знаю» — и отказывается пустить без подтверждения личности. Разбираем что это такое, почему происходит и как исправить.
Что такое ошибка 401
HTTP статус 401 Unauthorized — это код ответа сервера, означающий: «Для доступа к этому ресурсу требуется аутентификация, но она не была предоставлена или оказалась неверной».
Unauthorized переводится как «не авторизованный», «без разрешения». Несмотря на название, 401 — это ошибка аутентификации (кто ты?), а не авторизации (что тебе можно?). Технически точнее было бы назвать её «Unauthenticated», но исторически сложилось именно «Unauthorized».
401 относится к классу 4xx — ошибки клиента. Сервер работает нормально, просто запрос пришёл без нужных учётных данных или с неверными.
Чем 401 отличается от 403
Это ключевое различие которое часто путают.
- 401 Unauthorized — сервер не знает кто вы. Нужно предоставить учётные данные. Если вы войдёте — возможно, получите доступ.
- 403 Forbidden — сервер знает кто вы, но доступ запрещён. Вы аутентифицированы, но у вашей учётной записи нет прав на этот ресурс. Вход не поможет — нужны другие права.
Аналогия: 401 — охранник не знает вас и просит предъявить пропуск. 403 — охранник знает вас, но в этот отдел вам нельзя даже с пропуском.
Причины ошибки 401 для пользователя
- Не выполнен вход в систему. Страница требует авторизации, а сессия не установлена или истекла. Решение: войдите в аккаунт.
- Неверные учётные данные. Неправильный логин или пароль при базовой HTTP-аутентификации. Решение: проверьте и введите правильные данные.
- Истёк токен сессии. Вы были авторизованы, но сессия устарела (истёк срок действия cookie или токена). Решение: обновите страницу или войдите заново.
- Повреждённые cookie. Cookie с данными сессии повреждены или несовместимы с текущей версией сайта. Решение: очистите cookie для этого домена и войдите снова.
- «This area is password protected». Страница защищена паролем через базовую HTTP-аутентификацию (.htpasswd на Apache). Нужен логин и пароль который установил владелец сайта — он появляется как системное окно браузера.
Как исправить 401 со стороны пользователя
- Убедитесь что вы авторизованы. Откройте главную страницу сайта — вы вошли в аккаунт? Если нет — войдите.
- Очистите cookie и кеш браузера. Chrome/Edge: Ctrl+Shift+Delete → выберите cookie и кеш → очистить. Firefox: Ctrl+Shift+Delete → аналогично. После очистки войдите заново.
- Попробуйте в режиме инкогнито. Если в инкогнито работает — проблема в cookie или расширениях основного браузера.
- Проверьте не истёк ли срок действия подписки или аккаунта. Некоторые сервисы блокируют доступ при истечении подписки через 401.
Причины 401 для разработчиков
- Отсутствует заголовок Authorization. API ожидает токен в заголовке, запрос отправлен без него.
# Неправильно — нет заголовка
curl https://api.example.com/data
# Правильно — с Bearer токеном
curl -H "Authorization: Bearer eyJ0eXAiOiJKV1Q..." https://api.example.com/data
- Неверный формат токена. API ожидает Bearer, а получает Basic — или наоборот. Или токен передан в неверном поле.
- Истёкший токен. JWT или OAuth токен имеет срок действия (exp). После истечения сервер возвращает 401. Решение: обновить токен через refresh-токен.
- Неверная подпись токена. Токен изменён или подписан неправильным ключом. Сервер не может его верифицировать.
- Отозванный токен. Пользователь вышел из системы, сменил пароль или токен был отозван вручную — токен в черном списке.
Как вернуть 401 в PHP
<?php
// Базовый вариант
http_response_code(401);
header('WWW-Authenticate: Bearer realm="API"');
header('Content-Type: application/json');
echo json_encode(['error' => 'Unauthorized', 'message' => 'Token required']);
exit;
// Для Basic аутентификации
header('WWW-Authenticate: Basic realm="Protected Area"');
http_response_code(401);
exit('401 Unauthorized');
?>
Важно: при возврате 401 сервер должен включать заголовок WWW-Authenticate с указанием схемы аутентификации — это требование стандарта RFC 7235. Без этого заголовка технически это не соответствует спецификации HTTP.
Настройка 401 в nginx
server {
location /api/ {
# Базовая HTTP-аутентификация
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
# Кастомная страница для 401
error_page 401 /401.html;
}
}
Ошибка 401 disabled_client: OAuth клиент отключён
Сообщение «401 это ошибка disabled_client: клиент OAuth был отключён» возникает при работе с Google API или другими OAuth-сервисами. Означает: OAuth-приложение (клиент) заблокировано или отключено в консоли разработчика.
Причины:
- приложение нарушило правила использования API,
- не прошло верификацию,
- было отключено владельцем,
- истёк срок действия клиентских ключей.
Решение:
- зайдите в Google Cloud Console (console.cloud.google.com) →
- APIs & Services →
- Credentials →
- найдите ваш OAuth client →
- проверьте статус.
Если приложение заблокировано Google — обратитесь в поддержку или создайте новый проект.
401 в Google: ошибка Google Error 401
Google Error 401 появляется при работе с сервисами Google (Gmail, Google Drive, YouTube API и др.) когда токен авторизации недействителен или отозван. Чаще всего помогает:
- выйти из всех аккаунтов Google в браузере →
- зайти заново →
- предоставить запрошенные разрешения.
Для API — обновить access token через refresh token.
Ошибка 401 — сигнал понятный: нужна аутентификация. Для пользователя это почти всегда решается повторным входом или очисткой cookie. Для разработчика — проверкой токена: есть ли он, правильного ли формата, не истёк ли, не отозван ли. Методично пройдите список причин — и 401 уйдёт.
Комментарии скоро откроются. А пока — пишите нам в Telegram-канал.