需要工具来“剥离”HTTP 基本身份验证

需要工具来“剥离”HTTP 基本身份验证

这个标题听上去有点邪恶,但事实并非如此。

我家里有几个 IP 网络摄像头。它们都能够以多部分 jpeg 流的形式提供动态图像。例如,如果我去,http://frontdoor-cam/videostream.cgi我会得到一个显示我家前廊的多部分 jpeg。

目前所有这些摄像头都使用 HTTP Basic 身份验证。没有选项可以关闭它。

我希望有一个网页,可以让我查看所有这些摄像头,而无需输入n用户 ID/密码组合。我曾尝试使用类似 URL 嵌入图像,http://userid:password@frontdoor-cam/videostream.cgi但 Chrome(显然还有其他浏览器)显然出于“安全原因”而取消了对这种 URL 样式的支持。(我认为这与网络钓鱼攻击有关。)

因此,我想要做的是让一些软件在我的 Linux 机器上运行,充当中介。 的请求http://mylinuxbox/whatever/frontdoor.foo将执行对 的请求http://frontdoor-cam/videostream.cgi,传入凭证(我只需将其包含在其配置中)并流回响应(流式传输很重要,因为会源源不断地发送 jpeg 图像流)。

我希望已经存在可以相当轻松地完成此操作的软件。该软件可以是在其自己的端口上运行的独立软件,也可以是 Apache 模块。(我的机器上已经运行了 Apache 2.2。)

答案1

您需要的是在 Linux 机器上运行反向代理。然后,您可以使用语法向代理发出访问摄像头的请求http://username:password@domain/。大多数 Web 服务器软件都可以设置为反向代理。

答案2

这是对 heavyd 答案的详细说明,而不是其他内容。根据他的回答,我最终在 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>

这样一来,任何到的请求http://mylinuxbox/cams/noauth/LOCATION/WHATEVER都会反向代理到http://LOCATION-cam/WHATEVER,并且会发送适当的授权标头。

在此期间我发现了一个警告:浏览器通常对它们向单个主机发送的并发请求数量有限制。Chrome 的限制恰好是 6。Firefox 有类似的默认限制,但可以在 about:config 中调整。由于所有摄像头似乎都来自单个主机,并且它们通过保持连接打开来“流式传输”,因此单个页面上只有前几个摄像头会显示,其余图像将被阻止,等待其他摄像头完成(这永远不会发生)。

一种可能的解决方法是使用虚拟主机、子域或甚至额外的端口,使单个服务器看起来像多个服务器。

相关内容