Посты по тегу: python

Nginx + LDAP авторизация

Задача

Довольно часто в корпоративной среде встречаются два сервиса:

  1. Nginx
  2. LDAP

И очень часто надо сделать авторизацию к какому-то сервису авторизацию через LDAP на Nginx. Сам Nginx не имеет встроенного модуля авторизации в LDAP, в отличие от Apache или Tomcat.

Итак, давайте сделаем basic авторизацию пользователей в Nginx через LDAP.

Сервер авторизации

Метод, который предлагают сами разработчики Nginx заключается в следующем: необходимо поднять промежуточный сервер, который будет проверять введеные данные в LDAP и возвращать результат в Nginx. В случае ответа HTTP/200 - пользователь авторизован. В любом другом случае - даные не верны.

Компания Nginx предоставляет такой простой демон, который можно взять тут.

Клонируем репу к себе на сервер:

$ git clone https://github.com/nginxinc/nginx-ldap-auth.git /opt/nginx-ldap-auth

и запускаем этот сервер (дополнительной настройки он не требует):

$ /opt/nginx-ldap-auth/nginx-ldap-auth-daemon-ctl.sh start

Остальная настройка будет производиться из конфига Nginx. Для этого нам надо добавить в Nginx что-то типа такого:

        location = /auth-proxy {
            internal;
            proxy_pass_request_body off;
            proxy_set_header Content-Length "";
            proxy_pass http://127.0.0.1:8888;
            proxy_set_header X-Ldap-URL "ldap://127.0.0.1:389";
            proxy_set_header X-Ldap-Template "(uid=%(username)s)";
            proxy_set_header X-Ldap-BaseDN "dc=example,dc=com";
        }
        location /private-storage {
            auth_request /auth-proxy;
            proxy_pass http://application-backend;
        }

По умолчанию, будет произведена попытка simple bind с анонимным пользователем. Если же у вас не поддерживается этот метод, то вам необходимо раскомментировать строки и указать DN и пароль пользователя, который может искать по дереву LDAP. Это самая простая конфигурация и она может быть расширена другими модулями авторизации.