我正在尝试使用需要基本 HTTP 身份验证的服务器提供的服务,但我使用的应用程序不支持身份验证。我想要做的是创建一个代理,使我的无需身份验证的应用程序能够通过代理(它将添加身份验证信息)连接到需要身份验证的服务器。我确信这是可以做到的,但是我对那里的代理数量感到不知所措,无法找到如何做到这一点的答案。
基本上我想要做的就是让代理提供这个 URL:
http://username:password@remoteserver/path
如以下 URL:
http://proxyserver/path
我可以在 Linux 上运行它,但如果我也能在 Windows 上运行它,那就更好了。开源或至少免费是必须的。如果设置起来相当简单,那就大有裨益。
答案1
基本身份验证通常是“用户名:密码”和 HTTP 标头“授权”的 Base64 编码字符串。
通过将以下内容添加到 Apache2 vHost 就可以了:
<Location /path>
RequestHeader set Authorization "Basic <base64string>"
</Location>
ProxyPass /path http://backend/path
ProxyPassReverse /path http://backend/path
您可以对“用户名:密码”部分进行 base64 编码http://www.motobit.com/util/base64-decoder-encoder.asp(例如)。上面的示例需要 mod_headers 和 mod_proxy(对于 Linux 和 Windows 均应可用,并且带有 Apache2)。
答案2
您还可以在其他一些软件包中修改请求(添加/更改标题),例如 Windows 上的 WinGate。
如果您看到浏览器弹出对话框,这通常意味着您从代理获得 407 响应或从最终服务器获得 401 响应,这并不一定表示使用了 HTTP Basic 身份验证。
您可以记录身份验证挑战字段,或者仅使用 wireshark 来查看发生了什么。
答案3
您可以尝试 BusyBox httpd:您可以代理请求并向代理路径添加基本身份验证。