Manifest V3下webRequest禁用后代理请求身份认证的新实现方法问询
Manifest V3 代理请求身份认证实现方案
背景说明
Manifest V3 废弃了webRequestAPI的阻塞式能力,原有基于chrome.webRequest.onAuthRequired的代理身份认证逻辑无法直接迁移,declarativeNetRequest目前暂未提供代理身份认证的相关规则支持,属于官方尚未完全落地的能力。
可行替代方案
方案1:使用
chrome.proxy配套的onAuthRequired事件(推荐)
前提:需要在manifest.json中申请proxy权限、host_permissions匹配对应代理地址,同时配置后台Service Worker。
示例配置(manifest.json):{ "manifest_version": 3, "name": "代理认证示例", "version": "1.0", "permissions": ["proxy"], "host_permissions": ["<all_urls>"], "background": { "service_worker": "background.js" } }后台逻辑(background.js):
// 先配置代理规则 chrome.proxy.settings.set({ value: { mode: "fixed_servers", rules: { singleProxy: { scheme: "http", host: "你的代理地址", port: 代理端口 } } }, scope: "regular" }); // 监听代理认证请求 chrome.webRequest.onAuthRequired.addListener( (details, callback) => { // 仅处理代理发起的认证请求 if (details.isProxy) { callback({ authCredentials: { username: "你的代理用户名", password: "你的代理密码" } }); } else { callback({}); } }, { urls: ["<all_urls>"] }, ["asyncBlocking"] );注:MV3中仅代理场景的
onAuthRequired事件保留了asyncBlocking权限,普通网页请求的该能力已被移除。方案2:代理地址内嵌凭证(适合固定凭证场景)
不需要监听事件,直接在代理配置中把凭证写入地址即可,示例:chrome.proxy.settings.set({ value: { mode: "fixed_servers", rules: { singleProxy: { scheme: "http", host: "用户名:密码@你的代理地址", port: 代理端口 } } }, scope: "regular" });注意:该方式会把凭证明文存储在代理配置中,存在泄露风险,仅适合个人自用类扩展使用。
方案3:降级回Manifest V2(临时过渡)
如果上述方案都无法满足需求,可暂时使用Manifest V2版本实现原有逻辑,Chrome对Manifest V2扩展的公开支持截止到2025年,企业政策下可延长到2026年。
内容的提问来源于stack exchange,提问作者Pitaroiu Bogdan
相关产品推荐
相关产品推荐

