Necessita de uma ferramenta para "remover" a autenticação básica HTTP

1

O título soa um pouco nefasto, mas não é realmente.

Eu tenho algumas webcams IP na minha casa. Todos eles têm a capacidade de exibir imagens em movimento na forma de um fluxo multipart-jpeg. Por exemplo, se eu for para http://frontdoor-cam/videostream.cgi , recebo um multipart-jpeg mostrando meu alpendre.

Agora, todas essas câmeras usam a autenticação básica HTTP. Não há opção para desligá-lo.

Eu gostaria de ter uma página da web na qual eu possa ver todas essas câmeras sem ter que inserir n combinações de ID do usuário / senha. Eu tentei incorporar imagens usando URLs como http://userid:password@frontdoor-cam/videostream.cgi , mas o Chrome (e aparentemente outros navegadores) aparentemente está removendo o suporte a esse estilo de URL por "razões de segurança". (Eu suponho que isso tenha a ver com ataques de phishing.)

Então, o que eu gostaria de fazer é ter algum software em execução na minha caixa do Linux que funcionará como um mediador. Uma solicitação para http://mylinuxbox/whatever/frontdoor.foo executaria a solicitação para http://frontdoor-cam/videostream.cgi , passando as credenciais (que eu acabei de incluir em sua configuração) e enviando de volta a resposta (o fluxo é importante, pois um fluxo infinito de imagens jpeg é enviado de volta ).

Espero que já exista algo que possa fazer isso com bastante facilidade. O software pode ser algo autônomo executado em sua própria porta ou pode ser um módulo do Apache. (Eu já tenho o Apache 2.2 em execução na minha máquina.)

    
por Laurence Gonsalves 15.10.2013 / 00:25

2 respostas

3

O que você precisa é de um proxy reverso em execução na sua caixa do Linux. Você pode então ter solicitações para o proxy acessar as câmeras usando a sintaxe http://username:password@domain/ . A maioria dos softwares de servidor web pode ser configurada como um proxy reverso.

por 15.10.2013 / 00:37
3

Esta é uma elaboração sobre a resposta de heavyd, mais do que qualquer outra coisa. Com base na sua resposta, aqui está o que acabei fazendo na minha configuração do Apache:

LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so

...

<Proxy *>
    Allow from all
</Proxy>

ProxyPassMatch ^/cams/noauth/([-a-z]*)/(.*)$ http://$1-cam/$2

<LocationMatch "/cams/noauth/">
    RequestHeader set Authorization "Basic dXNlcmlkOnBhc3N3ZA=="
</LocationMatch>

Isso faz com que qualquer solicitação para http://mylinuxbox/cams/noauth/LOCATION/WHATEVER inverta o proxy para http://LOCATION-cam/WHATEVER , e o cabeçalho de Autorização apropriado será enviado.

Uma ressalva que descobri durante isso: os navegadores geralmente têm um limite de quantas solicitações simultâneas eles enviarão para um único host. Com o Chrome, o limite passa a ser 6. O Firefox tem um limite padrão semelhante, embora possa ser ajustado em about: config. Como todas as câmeras parecem vir de um único host, e como elas "transmitem" mantendo a conexão aberta, apenas as primeiras poucas câmeras em uma única página serão exibidas, e as imagens restantes ficarão bloqueadas esperando que as outras câmeras terminem. (o que nunca acontece).

Uma solução possível seria usar hosts virtuais, subdomínios ou talvez até portas adicionais para fazer com que o servidor único pareça ser vários servidores.

    
por 15.10.2013 / 05:43

Tags