为什么 Chrome 一再要求输入代理用户名和密码
目录

简而言之: 当代理返回状态码 407(Proxy Authentication Required,需要代理身份验证)时,Chrome 会显示代理登录对话框。Chrome 不会从代理设置或启动参数中读取凭据,所以您要么在对话框中输入,要么由扩展程序代为提供。登录后对话框又出现,最常见的原因是代理拒绝了您发送的凭据。需要密码的 SOCKS5 代理在 Chrome 中无法使用,因为 Chrome 没有实现任何 SOCKS5 身份验证。
当代理要求登录,而 Chrome 又没有其他办法应答时,Chrome 就会一再要求输入代理用户名和密码。问题背后有四种情况,其中三种可以在 Chrome 内部解决。第四种,即需要密码的 SOCKS5 代理,需要在代理一侧做出调整,或者换一个浏览器。
代理登录对话框意味着什么?
代理拒绝转发您的请求,直到您登录为止。用 HTTP 的术语来说,它返回了状态码 407(Proxy Authentication Required),RFC 9110 对它的描述是“客户端需要验证自己的身份,才能为此请求使用代理”。代理会列出它接受的登录方式,浏览器则可以带上凭据重新发送请求。
Chrome 通过一个标题为“登录”的对话框收集凭据。按照 Chromium 的对话框字符串,其英文文本是“The proxy $1 requires a username and password.”(代理 $1 要求提供用户名和密码),其中 $1 会替换为代理的地址。对于 HTTP 代理,Chrome 支持 Basic、Digest、Negotiate 和 NTLM 几种方式,列在 Chromium 的代理说明中。
为什么 Chrome 一再要求输入代理密码?
最常见的原因是代理拒绝了凭据并再次返回 407,于是 Chrome 再问一次。密码错误、复制用户名时末尾多了一个空格,或者账户已被服务商停用,从浏览器这一侧看起来都是一样的。
当密码放在 Chrome 不读取的地方(例如代理设置中),或者存有密码的扩展程序没有获得应答权限时,对话框也会反复出现。需要密码的 SOCKS5 代理表现不同:Chrome 不会为它显示对话框,连接会直接失败。“找到您的情况”表格列出了全部四种情况以及各自的处理方法。
为什么写在代理设置里的密码会被忽略?
Chrome 不读取写在代理设置中的凭据。许多系统允许您在那里填写用户名和密码,或者以 user:password@host:port 的形式写进地址,而 Chromium 的代理说明说得很明确:“Chrome 没有实现这一点,也不会使用嵌入在代理设置中的任何凭据。”身份验证走的是通常的登录流程,对大多数人来说,这个流程就是那个对话框。
用 --proxy-server 启动参数设置代理,也只是填写手动设置的又一种方式,所以写进参数里的密码同样不起作用。
扩展程序如何替您应答对话框?
Chrome 允许扩展程序在对话框出现之前应答代理的登录请求。webRequest API 会触发一个 onAuthRequired 事件,当发出请求的是代理时,其 isProxy 标志为 true;拥有 webRequestAuthProvider 权限的扩展程序可以用用户名和密码来应答。
我们免费的 ProxyJam Connector 就使用这个事件。您在每个代理配置中保存用户名和密码,扩展程序会为主机和端口与发出请求的代理相匹配的已保存代理作出应答。
- 在 Chrome 上,您在其 Settings(设置)页面上授予网络访问权限后,它才会应答;在此之前,浏览器自己的对话框会照常出现。
- 当代理对同一个请求两次拒绝凭据时,Connector 会停止重试,其工具栏徽标显示 AUTH。
- 它为 HTTP 和 HTTPS 代理应答。带有用户名和密码的 SOCKS5 配置会收到一条警告,因为 Chrome 无法使用它们。
Chrome 能使用需要密码的 SOCKS5 代理吗?
不能。Chromium 的代理说明写道:“Chrome 不支持任何 SOCKSv5 身份验证方式(尽管该协议本身有一些)”,SOCKS4 也同样不支持。Chrome 的 SOCKS5 客户端只向代理提供不需要凭据的那种方式,所以坚持要求密码的代理会拒绝连接。扩展程序 API 中也没有可供扩展程序应答的 SOCKS 登录事件。
可行的办法:
- 向服务商登记您的地址。 有些代理服务商可以放行来自您提供的 IP 地址列表的连接,无需密码。
- 使用服务商的 HTTP 接入点。 如果同一个代理也接受 HTTP 连接,Chrome 就可以通过对话框或扩展程序登录。
- 为这个代理使用 Firefox。 Firefox 的扩展程序 API 会为 SOCKS 代理传递用户名和密码(MDN 的 ProxyInfo 参考)。Connector 的 Firefox 版本使用了这一点,可以从 Firefox Add-ons 安装。
接下来该做什么?
如果您要在多个需要密码的代理之间切换,一个保存了各个代理凭据的扩展程序会在 HTTP 和 HTTPS 上替您应答,扩展程序页面列出了 Connector 在 Chrome 上能做的事。要只让部分网站通过这样的代理,请参阅只让部分网站走代理。对所有切换器都有影响的扩展程序规则变化,见 Manifest V3 给代理扩展程序带来了哪些变化。
如果您正在为 Connector 挑选代理,请阅读什么是 ISP 代理:ProxyJam 在 ISP 代理页面上销售静态住宅(ISP)代理,价格见价格页面。
