Авторизация через LDAP

  • Создана: 04.04.2017 07:07
  • Обновлена: 19.11.2018 11:02

Настройка Apache под Windows

Для использования встроенной аутентификации Windows в Devprom (например, в случае доменной авторизации, реализованной на базе Active Directory) необходимо выполнить следующее.

1. Импортировать пользователей из LDAP-каталога в административном разделе на странице Пользователи - Импорт из LDAP

2. Открыть на редактирование файл devprom/apache/conf/devprom-ldap.conf и раскомментировать строчку Listen 8080

3. Настроить параметры подключения к LDAP-каталогу, далее приведен пример настройки для случая Active Directory:

AuthLDAPURL ldap://IP-DOMAIN-CONTROLLER:389/ou=Germany,dc=example,dc=com?sAMAccountName?sub?(objectClass=*)
AuthLDAPBindDN "CN=John Doe,OU=IT Department,OU=Germany,DC=example,DC=com"
AuthLDAPBindPassword secret

4. Перезапустить сервис Devprom.Apache

net stop devprom.apache
net start devprom.apache

5. Открыть приложение в браузере по адресу сервера, где оно установлено, с использованием порта 8080, и авторизоваться под доменной учетной записью, которая ранее была импортирована из LDAP-каталога.

6. Если авторизация через LDAP работает успешно и вы будете использовать только этот вариант, то необходимо отредактировать файл devprom/apache/conf/httpd.conf и закомментировать следующие строчки:

#Include conf/devprom.conf

а файл devprom/apache/conf/devprom-ldap.conf отредактировать следующим образом:

#Listen 8080
VirtualHost *:80

 

Настройка Apache под Linux и Unix

Используйте этот конфигурационный файл как шаблон для настройки LDAP в Apache. Например, сохраните его в файл /etc/apache2/sites-available/ldap.conf

LoadModule env_module modules/mod_env.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule session_module modules/mod_session.so
LoadModule session_cookie_module modules/mod_session_cookie.so
LoadModule request_module modules/mod_request.so
LoadModule auth_form_module modules/mod_auth_form.so
LoadModule session_crypto_module modules/mod_session_crypto.so 

<VirtualHost *:80>
    DocumentRoot /var/www/devprom/htdocs
    Timeout 600
    KeepAlive On
    MaxKeepAliveRequests 0
    KeepAliveTimeout 150

    HostnameLookups Off
    UseCanonicalName Off

    ErrorDocument 404 app/front.php
    ErrorDocument 500 app/front.php

    Session On
    SessionEnv On
    SessionCookieName session path=/
    SessionCryptoPassphrase secret
    ErrorDocument 401 /login
    SetEnv no-auth 1

    <Directory /var/www/devprom/htdocs>
        Options +ExecCGI
        AllowOverride All
            
        AuthType form
        AuthName realm
        AuthFormProvider ldap anon
        AuthFormAuthoritative off
        AuthFormLoginRequiredLocation /login?redirect=%{REQUEST_URI}%{escape:?%{QUERY_STRING}}
        AuthFormPassword pass
        AuthFormUsername login

        AuthLDAPURL ldap://localhost:10389/ou=system?uid??(objectClass=*)
        AuthLDAPBindDN uid=admin,ou=system
        AuthLDAPBindPassword secret
        AuthLDAPBindAuthoritative off
        AuthLDAPRemoteUserIsDN on
        LDAPReferrals Off
                
        Anonymous_NoUserID off
        Anonymous_MustGiveEmail off
        Anonymous_VerifyEmail off
        Anonymous_LogEmail off
        Anonymous *

        Require valid-user
    </Directory>
    
    <Location /auth>
        SetHandler form-login-handler
        AuthFormLoginSuccessLocation /logged
    </Location>
    <Location /logoff>
        Session on
        SessionMaxAge 1
        SessionCookieName session path=/
    </Location>
    <LocationMatch "/(join-project|login|recovery|reset|404|50[\d]{1}|cache|scripts|images|img|favicon|app/non-auth|tasks)">
        AuthType None
        Require all granted
    </LocationMatch>
    <If "%{HTTP:Devprom-Auth-Key} != ''">
        AllowOverride All
        AuthType None
        Require all granted
    </If>
    <Location /api>
        AllowOverride All
        AuthType None
        Require all granted
    </Location>
    <Location /servicedesk>
        AllowOverride All
        AuthType None
        Require all granted
    </Location>
    <Location /co/bundles/Devprom/ServiceDeskBundle/public>
        AllowOverride All
        AuthType None
        Require all granted
    </Location>
</VirtualHost>

Теперь нужно выполнить следующие команды, чтобы активировать нужные модули и сделать этот конфигурационный файл основным:

a2enmod ldap authnz_ldap authn_anon session session_cookie request auth_form session_crypto
a2dissite 000-default
a2ensite ldap.conf
service apache2 restart

CentOS

Необходимо установить дополнительные модули и перезапустить сервис httpd

yum -y install mod_ldap mod_authnz_ldap mod_session mod_session_cookie mod_auth_form mod_session_crypto
service httpd restart

Несколько LDAP-каталогов

При использовании нескольких LDAP-каталогов, в которых хранится аутентификационная информация, необходимо немного изменить настройку:

LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule session_module modules/mod_session.so
LoadModule session_cookie_module modules/mod_session_cookie.so
LoadModule request_module modules/mod_request.so
LoadModule auth_form_module modules/mod_auth_form.so
LoadModule session_crypto_module modules/mod_session_crypto.so 

<AuthnProviderAlias ldap alpha>
    AuthLDAPURL ldap://localhost:10389/ou=system?uid??(objectClass=*)
    AuthLDAPBindDN uid=admin,ou=system
    AuthLDAPBindPassword secret
    AuthLDAPBindAuthoritative on
    AuthLDAPRemoteUserIsDN on
    LDAPReferrals Off
</AuthnProviderAlias>
    
<AuthnProviderAlias ldap beta>
    AuthLDAPBindDN "cn=read-only-admin,dc=example,dc=com"
    AuthLDAPBindPassword password
    AuthLDAPURL ldap://ldap.forumsys.com:389/dc=example,dc=com?uid??(objectClass=*)
    AuthLDAPBindAuthoritative on
    AuthLDAPRemoteUserIsDN on
    LDAPReferrals Off
</AuthnProviderAlias>

<VirtualHost *:80>
    DocumentRoot /var/www/devprom/htdocs
	Timeout 600
	KeepAlive On
	MaxKeepAliveRequests 0
	KeepAliveTimeout 150

    ErrorDocument 404 app/front.php
    ErrorDocument 500 app/front.php

    Session On
    SessionEnv On
    SessionCookieName session path=/
    SessionCryptoPassphrase secret
    ErrorDocument 401 /login
    SetEnv no-auth 1

    <Directory />
        Options ExecCGI
        AllowOverride All
            
        AuthType form
        AuthName realm
        AuthFormProvider alpha beta anon
        AuthFormAuthoritative off
        AuthFormLoginRequiredLocation /login?redirect=%{REQUEST_URI}%{escape:?%{QUERY_STRING}}
        AuthFormPassword pass
        AuthFormUsername login
              
        Anonymous_NoUserID off
        Anonymous_MustGiveEmail off
        Anonymous_VerifyEmail off
        Anonymous_LogEmail off
        Anonymous *

        Require valid-user
    </Directory>
    
    <Location /auth>
        SetHandler form-login-handler
        AuthFormLoginSuccessLocation /logged
    </Location>
    <Location /logoff>
        Session on
        SessionMaxAge 1
        SessionCookieName session path=/
    </Location>
    <LocationMatch "/(join-project|login|recovery|reset|404|50[\d]{1}|cache|scripts|images|img|favicon|app/non-auth|tasks)">
        AuthType None
        Require all granted
    </LocationMatch>
    <If "%{HTTP:Devprom-Auth-Key} != ''">
        AllowOverride All
        AuthType None
        Require all granted
    </If>
    <Location /api>
        AllowOverride All
        AuthType None
        Require all granted
    </Location>
    <Location /servicedesk>
        AllowOverride All
        AuthType None
        Require all granted
    </Location>
    <Location /co/bundles/Devprom/ServiceDeskBundle/public>
        AllowOverride All
        AuthType None
        Require all granted
    </Location>

    LogLevel error
</VirtualHost>

Устранение возможных проблем

В случае возникновения проблем с авторизацией необходимо открыть на редактирование файл devprom/apache/conf/httpd.conf и изменить значение параметра: LogLevel debug

Затем, необходимо перезапустить сервис devprom.apache, авторизоваться повторно и изучить проблему в логе devprom/apache/logs/error.log, возможно некорректно заданы параметры подключения к LDAP-каталогу.

  1. При использовании Active Directory может потребоваться изменить порт подключения с 389 на 3268 (Global Catalog)

  2. При установке Devprom на Windows и использовании Active Directory возможны проблемы с подключением Apache к LDAP, если Apache запускается под учетной записью Local System, которой не разрешено подключаться к AD.

CentOS

При использовании этой ОС по умолчанию может быть установлен запрет на подключение httpd к сети и к LDAP в частности. Неоходимо этот запрет снять командами:

setsebool -P httpd_can_connect_ldap on
setsebool -P httpd_can_network_connect on

 

Решения для поддержки процессов разработки Devprom Software