# 为什么 Chrome 一再要求输入代理用户名和密码 | ProxyJam

当代理返回 407 时，Chrome 会一再要求输入代理密码。对话框为什么反复出现，为什么保存在设置里的密码被忽略，以及 SOCKS5 该怎么办。

- Canonical: https://proxyjam.com/zh/blog/chrome-proxy-password-prompt/
- Updated: 2026-10-13
- Language: zh

当代理返回状态码 407（Proxy Authentication Required，需要代理身份验证）时，Chrome 会显示代理登录对话框。Chrome 不会从代理设置或启动参数中读取凭据，所以您要么在对话框中输入，要么由扩展程序代为提供。登录后对话框又出现，最常见的原因是代理拒绝了您发送的凭据。需要密码的 SOCKS5 代理在 Chrome 中无法使用，因为 Chrome 没有实现任何 SOCKS5 身份验证。


## 确认代理无需对话框即可登录

1. **重启浏览器** 关闭所有 Chrome 窗口，确保当前会话中的登录不会被重复使用，然后在设置好代理的情况下重新打开 Chrome。
2. **通过代理打开一个页面** [“我的 IP 是什么”](/what-is-my-ip/)（英文）应当在不出现对话框的情况下加载，并显示代理的地址和网络。
3. **逐一测试您使用的每个代理** 如果您使用多个需要身份验证的代理，请依次通过每个代理打开检查页面。如果某个代理出现了对话框，说明该配置仍然缺少有效的凭据。

## 找到您的情况

|  | 您看到的现象 | 该怎么做 |
|---|---|---|
| 代理拒绝了凭据 | 每次提交后对话框都会再次出现 | 向代理的运营方核对用户名和密码，再重新粘贴一次，注意不要带多余的空格 |
| 凭据写在了代理设置里 | 密码明明写在代理地址里，对话框还是出现 | Chrome 会忽略写在那里的凭据；请通过对话框登录，或让扩展程序代为应答 |
| 扩展程序暂时无法应答 | 扩展程序存有密码，浏览器的对话框却仍然出现 | 授予扩展程序所需的权限；在 ProxyJam Connector 中，是在其 Settings（设置）页面上开启网络访问 |
| 需要密码的 SOCKS5 代理 | 没有出现对话框，通过代理的页面加载失败 | Chrome 无法发送 SOCKS5 凭据；请使用 IP 白名单、HTTP 接入点或 Firefox |

原因取自 HTTP 代理身份验证的规范、Chromium 关于代理设置的文档，以及 ProxyJam Connector 应答登录请求的方式。我们没有调查哪种原因最常见，服务商自身的配置还可能带来其他原因，例如对允许连接的地址的限制。


## 快速解答

### 错误 407 是什么意思？

407 Proxy Authentication Required 表示代理要求您先登录，然后才会转发请求。按照 RFC 9110 的定义，代理必须说明它接受哪种登录方式，浏览器则可以带上凭据重新发送请求。

### Chrome 会记住代理密码吗？

在 Chromium 的源代码中，代理登录信息会交给密码管理器，并按代理的主机和端口归档。我们没有找到描述这一行为的 Google 帮助页面，所以在依赖它之前，请先重启 Chrome 并通过代理加载一个页面来测试。

### 可以把密码写进 proxy-server 启动参数吗？

不可以。Chromium 的文档说明，Chrome 不会使用写在手动代理设置中的凭据，而启动参数正是填写这类设置的一种方式。身份验证走的是 Chrome 通常的登录流程，除非有扩展程序代为应答，否则就是那个对话框。

### 为什么我的 SOCKS5 代理没有密码对话框？

Chrome 没有为 SOCKS5 或 SOCKS4 代理实现任何身份验证，所以它没有凭据可以向您索取。通过需要密码的 SOCKS5 代理建立的连接会直接失败，不会出现提示。


## 参考来源

- [RFC 9110, section 15.5.8: 407 Proxy Authentication Required](https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.8)，该状态码的含义，以及客户端如何带上凭据重新发送请求
- [MDN: 407 Proxy Authentication Required](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/407)，对该状态码的通俗说明
- [Chromium: login dialog strings](https://chromium.googlesource.com/chromium/src/+/HEAD/components/login_dialog_strings.grdp)，对话框文本“The proxy $1 requires a username and password.”
- [Chromium: proxy support notes (proxy.md)](https://chromium.googlesource.com/chromium/src/+/HEAD/net/docs/proxy.md)，不使用手动代理设置中的凭据、HTTP 代理的身份验证方式，以及不支持 SOCKS 身份验证
- [Chromium: socks5_client_socket.cc](https://chromium.googlesource.com/chromium/src/+/HEAD/net/socket/socks5_client_socket.cc)，Chrome 的 SOCKS5 客户端只提供无需身份验证的方式
- [Chromium: login_handler.cc](https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/ui/login/login_handler.cc)，代理登录信息按代理的主机和端口归档，并交给密码管理器
- [Chrome for Developers: chrome.webRequest API](https://developer.chrome.com/docs/extensions/reference/api/webRequest)，onAuthRequired、isProxy 标志以及 webRequestAuthProvider 权限
- [MDN: proxy.ProxyInfo](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/proxy/ProxyInfo)，Firefox 为 SOCKS 代理传递用户名和密码




当代理要求登录，而 Chrome 又没有其他办法应答时，Chrome 就会一再要求输入代理用户名和密码。问题背后有四种情况，其中三种可以在 Chrome 内部解决。第四种，即需要密码的 SOCKS5 代理，需要在代理一侧做出调整，或者换一个浏览器。

## 代理登录对话框意味着什么？

代理拒绝转发您的请求，直到您登录为止。用 HTTP 的术语来说，它返回了状态码 407（Proxy Authentication Required），[RFC 9110](https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.8) 对它的描述是“客户端需要验证自己的身份，才能为此请求使用代理”。代理会列出它接受的登录方式，浏览器则可以带上凭据重新发送请求。

Chrome 通过一个标题为“登录”的对话框收集凭据。按照 [Chromium 的对话框字符串](https://chromium.googlesource.com/chromium/src/+/HEAD/components/login_dialog_strings.grdp)，其英文文本是“The proxy $1 requires a username and password.”（代理 $1 要求提供用户名和密码），其中 `$1` 会替换为代理的地址。对于 HTTP 代理，Chrome 支持 Basic、Digest、Negotiate 和 NTLM 几种方式，列在 [Chromium 的代理说明](https://chromium.googlesource.com/chromium/src/+/HEAD/net/docs/proxy.md)中。

## 为什么 Chrome 一再要求输入代理密码？

最常见的原因是代理拒绝了凭据并再次返回 407，于是 Chrome 再问一次。密码错误、复制用户名时末尾多了一个空格，或者账户已被服务商停用，从浏览器这一侧看起来都是一样的。

当密码放在 Chrome 不读取的地方（例如代理设置中），或者存有密码的扩展程序没有获得应答权限时，对话框也会反复出现。需要密码的 SOCKS5 代理表现不同：Chrome 不会为它显示对话框，连接会直接失败。“找到您的情况”表格列出了全部四种情况以及各自的处理方法。

## 为什么写在代理设置里的密码会被忽略？

Chrome 不读取写在代理设置中的凭据。许多系统允许您在那里填写用户名和密码，或者以 `user:password@host:port` 的形式写进地址，而 [Chromium 的代理说明](https://chromium.googlesource.com/chromium/src/+/HEAD/net/docs/proxy.md)说得很明确：“Chrome 没有实现这一点，也不会使用嵌入在代理设置中的任何凭据。”身份验证走的是通常的登录流程，对大多数人来说，这个流程就是那个对话框。

用 `--proxy-server` 启动参数设置代理，也只是填写手动设置的又一种方式，所以写进参数里的密码同样不起作用。

## 扩展程序如何替您应答对话框？

Chrome 允许扩展程序在对话框出现之前应答代理的登录请求。[webRequest API](https://developer.chrome.com/docs/extensions/reference/api/webRequest) 会触发一个 `onAuthRequired` 事件，当发出请求的是代理时，其 `isProxy` 标志为 true；拥有 `webRequestAuthProvider` 权限的扩展程序可以用用户名和密码来应答。

我们免费的 [ProxyJam Connector](/zh/browser-extension/) 就使用这个事件。您在每个代理配置中保存用户名和密码，扩展程序会为主机和端口与发出请求的代理相匹配的已保存代理作出应答。

- 在 Chrome 上，您在其 Settings（设置）页面上授予网络访问权限后，它才会应答；在此之前，浏览器自己的对话框会照常出现。
- 当代理对同一个请求两次拒绝凭据时，Connector 会停止重试，其工具栏徽标显示 AUTH。
- 它为 HTTP 和 HTTPS 代理应答。带有用户名和密码的 SOCKS5 配置会收到一条警告，因为 Chrome 无法使用它们。

## Chrome 能使用需要密码的 SOCKS5 代理吗？

不能。[Chromium 的代理说明](https://chromium.googlesource.com/chromium/src/+/HEAD/net/docs/proxy.md)写道：“Chrome 不支持任何 SOCKSv5 身份验证方式（尽管该协议本身有一些）”，SOCKS4 也同样不支持。Chrome 的 SOCKS5 客户端只向代理提供不需要凭据的那种方式，所以坚持要求密码的代理会拒绝连接。扩展程序 API 中也没有可供扩展程序应答的 SOCKS 登录事件。

可行的办法：

1. **向服务商登记您的地址。** 有些代理服务商可以放行来自您提供的 IP 地址列表的连接，无需密码。
2. **使用服务商的 HTTP 接入点。** 如果同一个代理也接受 HTTP 连接，Chrome 就可以通过对话框或扩展程序登录。
3. **为这个代理使用 Firefox。** Firefox 的扩展程序 API 会为 SOCKS 代理传递用户名和密码（[MDN 的 ProxyInfo 参考](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/proxy/ProxyInfo)）。Connector 的 Firefox 版本使用了这一点，可以从 [Firefox Add-ons](https://addons.mozilla.org/firefox/addon/proxyjam-connector/?utm_source=website) 安装。

## 接下来该做什么？

如果您要在多个需要密码的代理之间切换，一个保存了各个代理凭据的扩展程序会在 HTTP 和 HTTPS 上替您应答，[扩展程序页面](/zh/browser-extension/)列出了 Connector 在 Chrome 上能做的事。要只让部分网站通过这样的代理，请参阅[只让部分网站走代理](/zh/blog/chrome-proxy-for-specific-sites/)。对所有切换器都有影响的扩展程序规则变化，见 [Manifest V3 给代理扩展程序带来了哪些变化](/zh/blog/switchyomega-manifest-v3/)。

如果您正在为 Connector 挑选代理，请阅读[什么是 ISP 代理](/zh/blog/what-are-isp-proxies/)：ProxyJam 在 [ISP 代理页面](/zh/isp-proxies/)上销售静态住宅（ISP）代理，价格见[价格页面](/zh/pricing/)。

