eXist db atrás do proxy Apache - autenticação

1

Eu executo um banco de dados XML eXist db que é intermediado por proxy atrás do Apache. A configuração do httpd.conf é a seguinte:

<VirtualHost *:80>

    ServerName foo
    ServerAlias foo

      ProxyRequests Off
      <Proxy *>
          Order deny,allow
          Allow from all
      </Proxy>

      ProxyPass        / http://localhost:8080/exist/apps/foo/
      ProxyPassReverse / http://localhost:8080/exist/apps/foo/

      ProxyTimeout 20

      ProxyPassReverseCookiePath /exist /
      ProxyPassReverseCookieDomain localhost foo

      RewriteEngine   on
      RewriteRule     ^/(.*)$     /$1   [PT]
  </VirtualHost>

Isso funciona muito bem. Acessando http://localhost com o navegador eu sou não solicitado a digitar qualquer senha. No entanto, agora quero proteger tudo o que o Apache possa enviar ou usar como proxy (incluindo os ErrorDocuments) com a autenticação básica de usuário.

Portanto, adicionei

<Location />
     AuthUserFile /etc/users 
     AuthName "Beta testers only" 
     AuthType Basic 
     Require valid-user 
   </Location>

para o httpd.conf. (Obviamente, não importa se eu faço isso na seção VirtualHost ou fora dela.)

E é aí que o problema começa.

Agora, quando tentamos acessar o host local, solicitamos um login duas vezes: primeiro, preciso digitar a senha do Apache "Somente para testadores beta". Depois de inserir um login legítimo, sou solicitado pelo navegador para um segundo login. Desta vez por eXist. No entanto, tentar fazer login com minha senha de administrador eXist leva o Firefox a um tempo de espera infinito sem que nada aconteça, enquanto no Konqueror eu recebo "Authentication Failed".

Eu simplesmente não consigo entender por que sou solicitado a inserir uma senha pelo eXist. Por que o eXist se importa se eu defini uma senha no Apache ou não?

    
por cis 09.11.2015 / 14:57

1 resposta

1

O motivo pelo qual você vê dois diálogos que imagino é que o Apache está fazendo a autenticação básica e depois encaminhando algum cabeçalho HTTP para o eXist, no entanto o eXist está rejeitando o cabeçalho auth porque ele não possui o mesmo banco de dados do Apache, e por isso tenta autenticar novamente.

Se eu entendi corretamente. Você deseja gerenciar toda a autenticação com o Apache e deixar o eXist fora da equação de autenticação. Isso está correto?

Se assim você pode ter dificuldade em fazer isso. O eXist tem seu próprio banco de dados do usuário, se você quiser usar o mesmo que o Apache, você precisará desenvolver seu próprio plugin Realm para o eXist para que ele possa usar o mesmo banco de dados do Apache (presumivelmente você está usando o PAM / etc / passwd)). Se você estiver usando o LDAP, o eXist já tem um plugin LDAP Realm para que você possa configurar o Apache e o eXist para ambos usarem isso.

Outra opção pode estar no eXist para apenas conceder ao usuário convidado todos os direitos de acesso a tudo, mas isso é uma idéia terrível.

Eu acho que você pode ser melhor trabalhar ao contrário, que é NÃO definir explicitamente Autenticação no Apache para o URL eXist que você está fazendo proxy. Em vez disso, você permite que o eXist gerencie sua autenticação. O eXist suporta autenticação básica perfeitamente (mesmo quando proxied atrás do Apache), você só precisa configurar os usuários e permissões apropriadamente no eXist.

    
por 10.11.2015 / 18:25