Nginx + LDAP авторизация
Задача
Довольно часто в корпоративной среде встречаются два сервиса:
- Nginx
- 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. Это самая простая конфигурация и она может быть расширена другими модулями авторизации.
Комментарии: