我正在开发一个反向代理解决方案(CentOS 7 + Apache w / pcs + Pacemaker + Corosync for 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,因此系统会提示我IIS凭据的“身份验证”弹出对话框。我不确定我缺少什么。我已经做了很多网络搜索,但还没有发现任何东西。
我知道F5和Kemp之类的解决方案可以实现这种功能,但是我们没有足够的预算,也不需要那么大的系统。但是,我不确定他们是如何做到的。他们可能已经构建了用于处理它的自定义模块,而我正在追逐自己的尾巴,但我希望不会。
非常感谢您的帮助。
埃里克