Обратный прокси-сервер Apache с формой авторизации не передает учетные данные на прокси-сервер - PullRequest
0 голосов
/ 10 сентября 2018

Я работаю над решением с обратным прокси (CentOS 7 + Apache w / pcs + Pacemaker + Corosync для HA), которое прекрасно работает.

Мне нужно добавить аутентификацию, которая передается на один из прокси-серверов. Используя базовую аутентификацию LDAP, я могу заставить это работать:

Listen 10.2.0.11:80
<VirtualHost 10.2.0.11:80>
  <Proxy balancer://authweb>
    BalancerMember http://win-web01
  </Proxy>

  ServerName authweb
  DocumentRoot "/var/www/html"

  ProxyPreserveHost On

  <Location />
    SetEnv proxy-chain-auth On
    AuthName "Password Protected.  Enter AD User & Password."
    AuthType Basic
    AuthBasicProvider ldap
    AuthBasicAuthoritative Off
    AuthLDAPURL "ldap://10.2.0.7:3268/dc=domain,dc=test?userPrincipalName?sub?(objectClass=*)"
    AuthLDAPBindDN "administrator@DOMAIN.TEST"
    AuthLDAPBindPassword "P@ssw0rd"

    Session On
    SessionCookieName session path=/

    Require valid-user
  </Location>

  ProxyPass / balancer://authweb/
  ProxyPassReverse / balancer://authweb/
</VirtualHost>

Эта конфигурация работает хорошо. Появляется диалоговое окно «Проверка подлинности», которое принимает учетные данные и передает их на сервер за прокси-сервером - в данном случае на сервер IIS.

Мы хотим использовать красивую форму для входа в систему вместо всплывающего диалогового окна Auth. Однако я изо всех сил пытаюсь заставить это работать. Вот что у меня есть:

Listen 10.2.0.11:80
<VirtualHost 10.2.0.11:80>
  <Proxy balancer://authweb>
    BalancerMember http://win-web01
  </Proxy>

  ServerName authweb

  ProxyRequests Off
  ProxyPreserveHost On
  SetEnv proxy-chain-auth On
  <Location />
   SetEnv proxy-chain-auth On
   AuthName "Password Protected.  Enter AD User & Password."
   AuthType form
   AuthFormProvider ldap
   AuthFormAuthoritative Off
   AuthFormLoginRequiredLocation "/login.html"

   AuthLDAPURL "ldap://10.2.0.7:3268/dc=domain,dc=test?userPrincipalName?sub?(objectClass=*)"
   AuthLDAPBindDN "administrator@DOMAIN.TEST"
   AuthLDAPBindPassword "P@ssw0rd"

   Session On
   SessionCookieName session path=/

   Require valid-user

   ErrorDocument 401 "/login.html"

  </Location>
  <Location /login.html>
    SetEnv proxy-chain-auth On
    AuthType None
    AuthName "Login"
    Require all granted

    ProxyPass !
  </Location>

  ProxyPass / balancer://authweb/
  ProxyPassReverse / balancer://authweb/
</VirtualHost>

Это почти работает. Сервер Apache отображает форму Auth и принимает сообщение и прокси на сервере IIS. Однако он не передает учетные данные в IIS, поэтому мне предлагается всплывающее диалоговое окно Auth для учетных данных IIS. Я не уверен, что мне не хватает. Я много занимался поиском в Интернете и пока ничего не нашел.

Я знаю, что подобная функциональность возможна с решениями из таких мест, как F5 и Kemp, но у нас нет на это бюджета, и при этом нам не нужна такая большая система. Тем не менее, я не уверен, как именно они это делают. Возможно, они создали собственные модули для обработки, и я гоняюсь за хвостом, но надеюсь, что нет.

Любая помощь очень ценится.

Эрик

...