Apache2反向代理到需要BasicAuth的终点,但希望将其从用户隐藏

基本上我的情况是,我有一个内部网站,需要一个单一的硬编码的用户名和密码访问(这不能被closures,只有改变)。 我通过一个反向代理公开这个网站的各种原因(隐藏端口,简化url,简化NAT等)。

但是,我想要做的就是能够使用Apache来处理身份validation,以便:

  1. 我不需要给每个人一个密码
  2. 我可以使用Apache的BasicAuth有多个用户名和密码
  3. 对于内部用户,我不必提示input密码

编辑:关于更丰富的身份validation第二部分已被转移到新的问题

这里或多或less是我现在拥有的:

<VirtualHost *:80> ServerName sub.domain.com ProxyPass / http://192.168.1.253:8080/endpoint ProxyPassReverse / http://192.168.1.253:8080/endpoint # The endpoint has a mandatory password that I want to avoid requiring users to type # Ie something like this would be nice (but does not work) # ProxyPass / http://username:password@192.168.1.253:8080/endpoint # ProxyPassReverse / http://username:password@192.168.1.253:8080/endpoint # Also need to be able to require a password to access proxy for people outside local subnet # However these passwords will be controlled by Apache using BasicAuth, not the ProxyPass endpoint # Ideas? </VirtualHost> 

在将任何请求传递到端点之前添加或覆盖Authorization标头。 授权头可以是硬编码的,它只是字符串“username:password”的base-64编码(不带引号)。

如果尚未完成,则启用mod_headers模块。

 RequestHeader set Authorization "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==" 

要有条件地执行此操作,请启用mod_setenvif,例如在本地请求的情况下仍要求主密码:

 SetEnvIf Remote_Addr "127\.0\.0\.1" localrequest RequestHeader set Authorization "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==" env=!localrequest 

 # ALL remote users ALWAYS authenticate against reverse proxy's # /www/conf/passwords database # <Directory /var/web/pages/secure> AuthBasicProvider /www/conf/passwords AuthType Basic AuthName "Protected Area" Require valid-user </Directory> # reverse proxy authenticates against master server as: # Aladdin:open sesame (Base64 encoded) # RequestHeader set Authorization "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==" 

那么我用你的例子来指向两个IP摄像机使用Apache Proxypass。 当我使用语法user:password@camarafeliz3.compufiber.com并通过iPhone访问时,我得到了来自safari(iphone导航器)的安全消息,所以我改变了这个例子与iPhone 4S

 <Location /camarafeliz1/ > # usuario admin password 123456 ProxyPass http://192.168.0.39/ ProxyPassReverse http://192.168.0.39/ RequestHeader set Authorization "Basic YWRtaW46MTIzNDU2==" </Location> <Location /camarafeliz3/ > # usuario admin password 123456 ProxyPass http://192.168.0.99/ ProxyPassReverse http://192.168.0.99/ RequestHeader set Authorization "Basic YWRtaW46MTIzNDU2==" </Location> 

而iphone 4s因为链接中的用户和密码而停止抱怨安全。