apache2: Exigir usuário válido E permitir tudo

1

Eu quero permitir a autenticação básica, mas não exigir isso. Todos os visitantes - autenticados ou não - devem poder acessar uma página (script) onde o script pode adicionar recursos especiais para usuários válidos. Então, primeiro tente a autenticação básica, se isso falhar, permita o acesso de qualquer maneira. O script decidirá o que fazer a seguir. Eu prefiro não fazer toda a autenticação dentro do script, mas deixar o apache fazer a autenticação e apenas passar o nome de usuário (se houver) para o script.

Na verdade, estou criando um serviço SOAP, não um website, mas você pode imaginar uma situação na qual você pode visitar a página inicial de um site sem solicitar um nome de usuário / senha e visitar uma página apenas para membros que aciona a autenticação http. Revisitar a página inicial agora pode resultar em uma página inicial personalizada.

Eu tenho lidado com o arquivo .htaccess e cheguei até aqui:

AuthType Basic
AuthName "Beveiligde website"
AuthUserFile .htpasswd
require valid-user
Order allow,deny
Allow from All
satisfy any

Isso permite tudo, mas infelizmente não tenta primeiro a autenticação (pelo menos não até onde eu posso ver). A variável de ambiente AUTH_TYPE no PHP está vazia, mesmo quando credenciais válidas são usadas.

É possível combinar isso dessa maneira? Eu poderia imaginar o apache apenas tentando a autenticação básica quando as regras de permissão / negação resultam em uma negação. Existe uma maneira de forçar a autenticação básica de qualquer maneira? ou eu estou indo no sentido errado?

    
por Roland684 09.03.2012 / 18:07

2 respostas

2

Você precisará ser complicado :) Para fazer o servidor pedir para autenticação, você precisará exigir um usuário válido. Mas isso poderia entrar em um bloco Location . Então, eu estou pensando, você poderia então alias (ou redirecionar) esse local para o local normal. Acho que algo assim funcionará:

<location "/try-auth-first">
require valid-user
satisfy all

alias /try-auth-first /the-real-one
#redirect /try-auth-first /the/real/one
</location>

Você pode precisar mexer um pouco, mas algo assim deve funcionar. Se a autenticação falhar, seu script poderá pegar o resultado 401 e, em seguida, tentar novamente diretamente para o local real (que precisa ser configurado para permitir de todos).

    
por 19.06.2012 / 18:10
0

Ordem negar, permitir é talvez a solução.

Order deny,allow
Deny from all

Eu não verifico.

    
por 09.03.2012 / 19:57