Что означает ошибка 401
Ошибка 401 Unauthorized означает, что сервер отказал в доступе, так как запрос не содержит валидных данных для аутентификации или они некорректны. Полный текст ответа часто выглядит так: 401 Unauthorized или HTTP 401 – Access is denied. Она появляется при обращении к веб-приложениям, API, админ-панелям и защищённым эндпоинтам, когда клиент не может подтвердить свою личность.
Причины возникновения
- Отсутствует или неверно указан заголовок
Authorization(например,BearerилиBasic). - Истёк срок действия токена доступа или refresh-токена.
- Неверные или устаревшие cookies и сессия завершена.
- Несовпадение системного времени на клиенте и сервере, из-за чего токен считается недействительным.
- Пользователю недоступен конкретный ресурс из-за ограничений ролей или прав.
- Прокси, VPN или межсетевой экран блокируют или изменяют заголовки авторизации.
Способы решения
Способ 1: Проверка и обновление заголовка Authorization
Убедитесь, что каждый запрос к защищённому эндпоинту включает корректный заголовок. Для Bearer-токена это выглядит так:
curl -H "Authorization: Bearer <ваш_токен>" https://api.example.com/protected
Если токен просрочен, запросите новый через эндпоинт обновления или повторный вход.
Способ 2: Очистка cookies и повторный вход
Устаревшие сессии часто вызывают 401. Удалите cookies для целевого домена и авторизуйтесь заново.
- В браузере: Настройки → Конфиденциальность → Cookies → удалить cookies сайта.
- В приложении: выполните выход и вход, чтобы обновить сессионные данные.
Способ 3: Синхронизация системного времени
Расхождение во времени делает токены недействительными. Синхронизируйте часы:
- Windows:
w32tm /resync - Linux/macOS:
sudo timedatectl set-ntp true
После синхронизации повторите запрос.
Способ 4: Проверка прав и ролей
Даже при наличии токена пользователь может не иметь прав на ресурс. Убедитесь, что учётная запись включена в нужные роли или группы. В API это часто проверяется через права scopes или claims в токене.
Способ 5: Отладка через curl или Postman
Изолируйте проблему, отправив запрос вручную. Это поможет понять, где именно теряется авторизация:
curl -v -H "Authorization: Bearer <ваш_токен>" https://api.example.com/protected
Если ответ снова 401, проверьте сам токен и настройки сервера. Если ответ отличается, проблема может быть в клиентском коде или прокси.
Профилактика
- Регулярно обновляйте токены и используйте refresh-токены с адекватным сроком жизни.
- Не храните токены в незащищённых местах, например в localStorage без дополнительных мер защиты.
- Следите за системным временем на серверах и клиентах, особенно при работе с JWT.
- Используйте единый механизм авторизации (например, OAuth 2.0) и централизованное управление ролями.
- Тестируйте API с актуальными токенами перед развёртыванием изменений.