apache - 具有身份验证表单的 Apache 反向代理未将凭据传递给代理服务器
问题描述
我正在研究一个反向代理解决方案(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>
这个配置很好用。将弹出一个 Auth 对话框,接受凭据,并将凭据传递给代理后面的服务器 - 在本例中为 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 这样的解决方案可以实现这样的功能,但我们没有预算,也不需要那么大的系统。但是,我不确定他们是如何做到的。他们可能已经构建了自定义模块来处理它,而我正在追赶我的尾巴,但我希望不会。
任何帮助是极大的赞赏。
埃里克
解决方案
推荐阅读
- apache-spark - 使用 SparklyR 连接到 Spark 时出错
- regex - 如何使用正则表达式在回车和换行之前附加字符
- r - tidyverse 中是否有 R 函数可以使用代码选择列的元素?
- python - 如何使用 OpenCV 对 IP 摄像机进行身份验证
- angular - 如何构建我的 Angular 8 应用程序,以便在浏览器中打开 index.html 时它可以工作?
- c# - 在 Unity3D 中模拟真实的汽车旋转
- html - 在我的 CSS 中,网格属性无法正常运行
- sql-server - 推荐邮寄地址匹配方案?
- python - 如果两个字母变为0,如何从文件中的字符串中查找一个单词(Python 3)
- java - 无法加载驱动程序类 org.mariadb.jdbc.Driver