具有前端和后端身份验证的Apache反向代理

时间:2014-12-26 12:08:31

标签: apache authentication reverse-proxy kerberos

这是我想要实现的结果:

  1. 客户端浏览器(在我的情况下为Chrome)在50070上命中Apache HTTPd服务器(server1)。客户端浏览器无法访问Kerberos KDC并且不携带Kerberos / GSS身份验证数据。

  2. Apache HTTPd可以访问KDC并配置为需要Kerberos身份验证,但使用密码备份(即KrbMethodK5PasswdOn,因此它接受" {{1} }"在HTTP标头中。)

  3. 由于备用选项,客户端浏览器会提示用户输入登录名和密码(因为客户端没有提供Kerberos票证)。 Apache HTTPd根据Kerberos验证提供的登录名和密码,并获取正确的用户主体Kerberos票证并将其保留在内存中(由于Authorization: Basic选项,它还将其保存到/ tmp)。

  4. Apache HTTPd反向代理到后端服务器(server2),后端服务器也侦听端口50070.后端服务器正在运行Jetty,它只接受Kerberos,没有任何密码/基本身份验证后备 - 如果有&#39 ;没有Kerberos票,没有条目。 Apache HTTPd使用login + pass向服务器2发送从KDC获得的用户主体Kerberos票证。

  5. 在我目前的配置中,第1,2和2点3成功工作 - 即客户端到server1身份验证工作正常,我可以看到Apache在server1上短暂保存用户主票。

    但是,我很难强制Apache HTTPd使用获取的用户Kerberos票证来对server2进行身份验证。基本上,根本不会向server2发送任何身份验证详细信息。

    这是我的配置:

    KrbSaveCredentials

    我也尝试使用<VirtualHost 1.2.3.4:50070> ServerAlias server1.example.com:50070 ServerAlias server1:50070 ProxyPreserveHost Off ProxyRequests Off ProxyPass / http://server2.example.com:50070/ retry=0 ProxyPassReverse / http://server2.example.com:50070/ retry=0 <Proxy *> Order allow,deny Allow from all </Proxy> ErrorLog logs/error_log TransferLog logs/access_log LogLevel debug <Location /> Options None AuthType Kerberos AuthName "NameNode" KrbMethodNegotiate on KrbMethodK5Passwd on KrbServiceName HTTP KrbAuthRealms EXAMPLE.COM Krb5Keytab /etc/httpd/conf/http.keytab KrbSaveCredentials on KrbLocalUserMapping on Require valid-user </Location> </VirtualHost> 提供的SetEnv proxy-chain-auth,我认为它按设计工作,确实发送了&#34; mod_proxy_http&#34;的确切内容。客户端来到server1的标头,转发到server2,但是server2除了Kerberos之外不支持任何东西(即&#34; Authorization: Basic ...&#34;),并在其日志中抱怨未知的auth方法。

    有没有办法强制Apache HTTPd使用从KDC获得的Kerberos票证,使用客户端浏览器提供的登录名和密码,然后使用Negotiate方法(带票证)与目标服务器2进行身份验证我反向代理?

0 个答案:

没有答案
相关问题