#Что означает ошибка
401 и 403
Коды 401 и 403 часто путают, а ведь они означают разное. 401 Unauthorized — сервер не знает, кто вы: нет учётных данных, они неверны или срок токена истёк. 403 Forbidden — сервер знает, кто вы, но не разрешает доступ к ресурсу. Для 401 нужно «представиться» (войти, передать токен), для 403 — получить права или сменить ресурс.
Различие важно как для пользователей (повторный вход против обращения к администратору), так и для разработчиков (какой код возвращать в API). Неверное применение кодов усложняет диагностику и работу клиентских приложений.
401 — нет аутентификации, 403 — нет прав; проверьте токен и роли.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Токен истёкСрок. | Проявляется как «401 и 403» или близкий по смыслу сбой. | Обновите. |
| Нет правРоль. | Проявляется как «401 и 403» или близкий по смыслу сбой. | Выдайте. |
| Неверный ключAPI. | Проявляется как «401 и 403» или близкий по смыслу сбой. | Проверьте. |
| Блокировка IPФильтр. | Проявляется как «401 и 403» или близкий по смыслу сбой. | Разрешите. |
#Пошаговое решение
- Проверьте токенДля собственных API-запросов: откройте вкладку «Сеть» в инструментах разработчика браузера (F12 → «Сеть»), воспроизведите отказ и найдите запрос со статусом 401. Проверьте, что пользователь действительно вошёл в систему и его токен не истёк. Не вставляйте настоящий токен в публичные сайты (включая декодировщики JWT) и не публикуйте заголовок Authorization. Обновляйте токен только штатным методом авторизации своего API.
- Проверьте рольПри коде 403 у авторизованного пользователя проверьте его роль и разрешённые действия в настройках своего приложения. Если требуется scope, сравните его с документацией API и выданными разрешениями, не подбирайте права обходом. Обычному посетителю нужно запросить доступ у владельца ресурса; повторный вход или новый токен не создают отсутствующие права автоматически.
- Прочитайте ответ сервераВ браузере F12 → вкладка «Сеть» → нужный запрос → «Заголовки/Ответ». Проверьте наличие
WWW-Authenticateпри 401, тело ответа и идентификатор запроса. В 403 заголовка авторизации может не быть, поскольку отказ часто связан именно с правами. Передавайте в поддержку URL, статус и время запроса без cookie, токенов и конфиденциальных данных.
#Что делать при 401
Выйдите из аккаунта и войдите снова, очистите cookie сайта, проверьте корректность логина и пароля. В API проверьте заголовок Authorization: схема (Bearer, Basic), отсутствие лишних пробелов и срок жизни токена. Сервер при 401 обязан вернуть заголовок WWW-Authenticate с описанием способа аутентификации.
#Что делать при 403
Проверьте, есть ли у вашей роли разрешение на ресурс. На сайтах это может быть блокировка по IP или стране, правила файрвола (WAF), права на файлы и каталоги веб-сервера, запрет листинга каталога без index-файла. В API 403 нередко возвращается при отсутствии нужного scope у токена.
#Рекомендации разработчикам
Не раскрывайте через 403 существование ресурсов, к которым у клиента нет доступа (в таких случаях безопаснее 404). Возвращайте в теле ответа машиночитаемую причину и логируйте попытки. Следите, чтобы истёкший токен давал 401 и позволял клиенту обновить его автоматически.
curl -i -H "Authorization: Bearer ТОКЕН" https://api.example.com/me