Назад | Перейти на главную страницу

Аутентификация с NGINX

Я запускаю набор прокси-серверов NGINX, использующих базовую аутентификацию браузера с файлом htpasswd для пользователей.

Я создал небольшое приложение с Laravel, которое аутентифицирует пользователя и предоставляет им список ссылок на эти прокси-серверы nginx.

Я хочу обновить аутентификацию nginx до чего-то вроде токенов JWT, однако я не уверен, что это было бы достаточно безопасно без стоящего за ним API для проверки самого фактического токена?

Другой вариант, о котором я думал, - это решение LDAP с прокси Laravel и NGINX с использованием аутентификации ldap.

Приложения, которые находятся за прокси-сервером nginx, не имеют аутентификации, и в настоящее время мы не намерены добавлять к ним какие-либо функции.

Nginx включает модуль запроса аутентификации, который

реализует авторизацию клиента на основе результата подзапроса. Если подзапрос возвращает код ответа 2xx, доступ разрешен. Если он возвращает 401 или 403, доступ запрещается с соответствующим кодом ошибки. Любой другой код ответа, возвращенный подзапросом, считается ошибкой.

Для ошибки 401 клиент также получает заголовок «WWW-Authenticate» из ответа на подзапрос.

На ум приходят две возможности:

  • Вы можете расширить существующее приложение Laravel так, чтобы было возможно «связать с ним» из Nginx, что приведет пользователя на страницу «Вход» и, в случае аутентификации, отправит ответ «200 OK» в Nginx.
  • Вы можете проверить первые существующие решения, используя эту технику, например Nginx LDAP Auth.

Разрабатывая второй ответ:

  • Если данные учетной записи действительно хранятся в LDAP, вы можете написать сценарий, который регулярно выполняется, например, через cron, который извлекает данные из LDAP и записывает их в htpasswd файл для чтения Nginx.

Nginx не имеет встроенного средства для этого. Он может выполнять только аутентификацию htpasswd и правила разрешения / запрета для каждого IP-адреса.

В Nginx Plus есть способ сделать это, и он подробно описан в блог Nginx