basic_auth

Тема дорожной карты · Nginx

HTTP Basic Authentication в Nginx реализована через модуль ngx_http_auth_basic_module, который запрашивает у клиента имя пользователя и пароль перед предоставлением доступа к локейшену или виртуальному хосту. Для включения Basic Authentication задайте директиве auth_basic строку realm (например, auth_basic "Restricted Area";) и укажите в auth_basic_user_file путь к файлу .htpasswd с хэшированными учётными данными, созданными утилитой htpasswd. Учётные данные Basic Authentication кодируются в base64, а не шифруются, поэтому Basic Authentication в Nginx всегда должна использоваться за SSL/TLS-терминацией — как правило, настроенной в том же блоке server — во избежание утечки учётных данных. Директива auth_basic off; позволяет выборочно отключить Basic Authentication для отдельных дочерних локейшенов — например, для эндпоинтов проверки работоспособности, которые должны оставаться публично доступными. Несмотря на простоту настройки Basic Authentication в Nginx, для более чувствительных окружений следует рассмотреть делегирование через auth_request или аутентификацию по сертификату как более надёжный вариант.

Как это работает

basic_auth имеет встроенную HTTP Basic auth (auth_basic + auth_basic_user_file с htpasswd), верификацию client TLS-сертов (ssl_client_certificate + ssl_verify_client on) и auth_request для делегированной auth (subrequest к auth-сервису — идеально для OAuth-flow, SSO, JWT-верификации через sidecar). Для SSO + OIDC — модуль lua-resty-openidc (с OpenResty/Lua) или vouch-proxy как sidecar.

Когда применять

HTTP Basic — для непубличных admin / internal dashboards: быстро настроить, достаточно поверх HTTPS. auth_request — для делегирования к OAuth-прокси (oauth2-proxy, vouch-proxy) когда нужен реальный SSO. Client TLS-серты — для very-high-assurance B2B API или замены VPN. Не пишите свою JWT-верификацию в nginx — OpenResty/Lua или sidecar.

Типичные ошибки

Ловушки basic_auth: HTTP Basic поверх HTTP (credentials в открытом виде — всегда HTTPS); htpasswd-файлы в git ("internal only"); JWT-верификация через regex в nginx (пожалуйста, нет); неверно защищены /.well-known/ пути (admin-эндпойнты утекают).

Связанные понятия

Полезные ресурсы