REMOTE_USER através do proxy reverso do Apache

5

Eu tenho um servidor web Apache com mod_proxy ativado e um Virtualhost, proxy.domain.com. Esse proxy é configurado para solicitar ao usuário credenciais com AuthType Basic. Em seguida, o conteúdo de web.domain.com está disponível por meio do proxy com ProxyPass e ProxyReverse. No entanto, a variável REMOTE_USER está vazia. Eu li coisas diferentes para conseguir isso com mod_rewrite e mod_headers, mas todas as minhas tentativas falharam. Alguém tem tido mais sorte que eu?

Obrigado.

    
por Laurent 13.09.2010 / 22:56

2 respostas

11

Isso é possível com mod_headers, mod_rewrite e mod_proxy.

No proxy, presumo que você tenha sua autenticação funcionando e definindo REMOTE_USER adequadamente. Em caso afirmativo, coloque o valor de REMOTE_USER em um cabeçalho de usuário proxy para o back-end da seguinte forma:

RewriteRule .* - [E=PROXY_USER:%{LA-U:REMOTE_USER}] # note mod_rewrite's lookahead option
RequestHeader set Proxy-User %{PROXY_USER}e

Veja o que acontece:

  1. O RewriteRule é acionado para cada solicitação e define a variável de ambiente PROXY_USER igual ao valor de REMOTE_USER, que já deveria ter sido definido por um módulo de autenticação.
  2. O RequestHeader define um cabeçalho de solicitação chamado Usuário-proxy com o valor de PROXY_USER

Agora, no backend, você pode extrair esse valor de cabeçalho e definir REMOTE_USER assim:

RewriteCond %{HTTP:Proxy-user} ^(.*)$
RewriteRule .* - [E=REMOTE_USER:%1]

Veja o que acontece:

  1. O RewriteCondition verifica o valor do cabeçalho Proxy-User para ver se ele corresponde ao padrão ^. * $ (o que será). Os parênteses dizem ao mod_rewrite para armazenar esse valor em% 1.
  2. O RewriteRule, em seguida, define a variável de ambiente REMOTE_USER com o valor em% 1.
por 05.02.2011 / 15:53
0

No apache 2.4, tentando obter o env vars produzido por mod_authnz_ldap e mod_kerb , foi isso que funcionou.

Digamos que você esteja procurando por AUTHORIZE_sAMAccountName ,

RewriteEngine On
RewriteRule .* - [E=THE_ACCOUNT_NAME:%{ENV:AUTHORIZE_sAMAccountName}] 
RequestHeader set MY_ACCOUNT_NAME %{THE_ACCOUNT_NAME}e

Depois disso, o HEADER pode ser registrado por exemplo:

CustomLog /tmp/custom.log "%h %l %u %t \"%r\" %>s %b %{MY_ACCOUNT_NAME}i"

Referências:

por 29.05.2018 / 16:40