Chrome打包应用程序是否有办法处理Http BasicAuthentication

时间:2014-05-22 05:15:32

标签: javascript git xmlhttprequest google-chrome-app

我正在构建一个名为Git Crx的Chrome打包应用程序,顾名思义,它需要使用HTTPS(智能协议)向远程git repos发送网络请求但是如果您尝试对网址执行XHR请求返回401,XHR将在不使用普通浏览器凭证机制的情况下失败,而先前打包的应用程序将显示浏览器正常凭证请求UI。

现在我认为这对我来说确实有意义,因为Chrome应用程序应该是独立的应用程序,而不仅仅是网页,它们恰好使用Chrome作为运行时。

但问题是,Chrome Apps现在如何处理使用普通http身份验证(返回401状态代码)的网站的身份验证,而不是使用Chrome应用程序可用的身份验证API支持的OAuth?

1 个答案:

答案 0 :(得分:2)

所以在研究这个问题时,我自己找到了答案......

首先基于从XHR响应中获取401作为状态,我可以设置Authorization标头进行身份验证,以QUnit测试用例的形式提供代码:

  asyncTest("check can do Basic Auth XHR", function() {
   expect(1);

   var authCreds = "maks:s3cret";
   var oReq = new XMLHttpRequest();

   function reqListener () {
      if (this.status == 200) {
        equal(this.responseText.trim(), "the secret", "expect correct res text from server");
        start();    
      } else if (this.status == 401) {
          oReq = new XMLHttpRequest();
          oReq.onload = reqListener;
          oReq.open("get", "http://acme.test.com/auth-test", true);
          oReq.setRequestHeader("Authorization", "Basic "+btoa(authCreds));
          oReq.send();
      }
    }

    oReq.onload = reqListener;
    oReq.open("get", "http://acme.test.com/auth-test", true);
    oReq.send();
});

但是假设该方案是Basic,但它可能是Digest或NTLM,所以你还需要解析响应头...

var authType = oReq.getResponseHeader('WWW-Authenticate');
// do auth based on type...

希望这将有助于其他人在同一条船上...