即时更改凭据到代理服务器

时间:2018-08-10 11:24:24

标签: javascript google-chrome-extension proxy

我正在开发chrome扩展程序。该扩展允许从列表中选择任何代理服务器,每个代理都需要授权。当用户想要两次连接到同一代理服务器但使用不同的凭据时,会出现一个问题,例如,如果用户首次成功登录chrome记住了它,以及当用户尝试使用其他凭据连接chrome时将使用首次登录时输入的凭据。

var authCredentials = {
  username: 'Jack',
  password: 'PassForJack'
}

var auth = function () {
    return {
       authCredentials
    };
};


chrome.webRequest.onAuthRequired.addListener(auth, {
   urls: ["<all_urls>"]
 }, ["blocking"]);

// set a new proxy server for the first login
chrome.proxy.settings.set({
  value: {
      mode: 'fixed_servers',
      rules: {
        singleProxy: {
            host: 'some-proxy-server.com',
            port: 8000
        }
    }
  },
  scope: 'regular'
});


// change credentails 
authCredentials = {
  username: 'Bob',
  password: 'PassForBob'
};

// remove proxy configuration
chrome.proxy.settings.set({
  value: {
    mode: 'direct'
  },
  scope: 'regular'
});

// remove onAuthListener
chrome.webRequest.onAuthRequired.removeListener(auth)
chrome.webRequest.onAuthRequired.hasListener(auth) // returns false

chrome.webRequest.onAuthRequired.addListener(auth, {
   urls: ["<all_urls>"]
 }, ["blocking"]);

// lets re connect 
chrome.proxy.settings.set({
  value: {
    mode: 'fixed_servers',
    rules: {
        singleProxy: {
            host: 'some-proxy-server.com',
            port: 8000
        }
    }
  },
  scope: 'regular'
});

// that doesn't help the user would be logged as "Jack" but has to be as "Bob"

1 个答案:

答案 0 :(得分:3)

由于问题不是很清楚,这里有多种可能性。我建议首先浏览chrome.webRequest的documentation。但是我的问题是,为什么不使用拦截器方法检查服务器凭证对?在扩展程序的background.js脚本中添加拦截器有一个不错的article,建议您使用beforeRequest钩子。