Basic Authentication (базовая аутентификация) — схема HTTP-аутентификации, определённая в RFC 7617 (2015), заменившем RFC 2617 (1999). Клиент передаёт учётные данные в заголовке HTTP-запроса: Authorization: Basic base64(login:password). Base64 — не шифрование, а кодировка: строка admin:secret превращается в YWRtaW46c2VjcmV0 и легко декодируется обратно. Без HTTPS любой, кто перехватит трафик, получит пароль в открытом виде.
Как работает
Механизм аутентификации: сервер возвращает HTTP 401 Unauthorized с заголовком WWW-Authenticate: Basic realm="Admin Area". Браузер показывает диалог ввода логина и пароля. Пользователь вводит данные, браузер кодирует их Base64 и добавляет заголовок Authorization к запросу. Сервер проверяет учётные данные и возвращает 200 OK или снова 401.
В nginx Basic Auth настраивается через директивы auth_basic и auth_basic_user_file:
location /admin {
auth_basic "Admin Area";
auth_basic_user_file /etc/nginx/.htpasswd;
}
Файл .htpasswd создаётся утилитой htpasswd из пакета apache2-utils. Пароли хранятся в хешированном виде (MD5, SHA1, bcrypt). В Apache — аналогично через директивы AuthType Basic, AuthUserFile, Require valid-user в .htaccess или основном конфиге.
Basic Auth не хранит состояние сессии: каждый запрос содержит заголовок Authorization. Браузер автоматически прикрепляет его до закрытия вкладки или очистки кеша. Выход реализуется только явным запросом с неверными данными или через API браузера.
История
Basic Auth появился в HTTP/1.0 (RFC 1945, 1996) как простейший механизм защиты ресурсов. В 1999 году RFC 2617 уточнил спецификацию и добавил Digest Authentication как более безопасную альтернативу. В 2015 году RFC 7617 актуализировал Basic Auth, добавив поддержку кодировки UTF-8 для логинов и паролей. Несмотря на известные ограничения, Basic Auth сохраняется как стандарт для защиты внутренних инструментов и API из-за своей простоты.
Применение в хостинге
- Защита staging-окружений и административных панелей от случайного доступа.
- Ограничение доступа к phpMyAdmin, Grafana, Kibana, Prometheus до настройки native-аутентификации.
- Защита директорий с чувствительным содержимым (например,
/backup/). - API-аутентификация для простых внутренних сервисов, где OAuth избыточен.
На что обращать внимание
Basic Auth без HTTPS — критическая уязвимость: пароль передаётся в кодировке Base64, которая тривиально декодируется. Всегда используйте Basic Auth только поверх TLS. Для VPS с nginx настройте Let's Encrypt сертификат перед включением Basic Auth. Basic Auth не защищает от brute-force атак — добавьте ограничение попыток входа через fail2ban. Для продакшен-приложений с пользователями используйте более безопасные механизмы: JWT, OAuth 2.0, сессионную аутентификацию.
Принцип Basic Auth
HTTP Basic Auth: браузер кодирует login:password в Base64 и отправляет в заголовке Authorization: Basic dXNlcjpwYXNz. Base64 — не шифрование: легко декодируется. Без HTTPS Basic Auth — передача пароля в открытом виде. С HTTPS — безопасен для простых сценариев.
Настройка в Nginx
auth_basic "Protected";
auth_basic_user_file /etc/nginx/.htpasswd;. Создание htpasswd: htpasswd -c /etc/nginx/.htpasswd username. Ограничение конкретного location или всего server. Исключения по IP: satisfy any; allow 10.0.0.0/8; deny all; auth_basic "...";.
Когда использовать Basic Auth
Защита staging/dev сред от случайной индексации и доступа. Защита admin-панелей как дополнительный уровень. Простые API с нечастым использованием. Для production API предпочтительнее: Bearer Token (JWT), API Key, OAuth2. Basic Auth не поддерживает логаут без закрытия браузера.
Basic Auth настраивается в Nginx через auth_basic директиву. Защищает staging-среды, admin-панели, Prometheus/Grafana. В связке с HTTPS безопасен. Fail2ban ограничивает перебор паролей. Для API: предпочтительнее Bearer Token.