避免在Chrome扩展程序中使用HTTP身份验证弹出窗口(摘要)

时间:2010-10-10 22:07:25

标签: javascript ajax google-chrome google-chrome-extension http-authentication

我目前正在开发Chrome扩展程序,我需要访问一些受http-auth保护的资源(webdav)。 HTTP身份验证使用(在最好的情况下)摘要身份验证。

我可以使用https://login:password@domain.tld/path/to/ressource表单直接在ajax请求中执行身份验证。

问题是:如果登录名/密码错误,我不能获得401状态(未经授权),Chrome会弹出常规验证对话框。这是我不想要的,因为它让用户感到困惑,我无法从这里保存凭据。

编辑:我面临的另一个用例是:我想检查一个资源是否受密码保护而不试图提供凭据来实际访问它。

如何在不弹出Chrome的授权框的情况下抓住401的想法?

3 个答案:

答案 0 :(得分:4)

Google Chrome小组已在Google Chrome 22中实施了onAuthRequired事件,因此现在可以检测何时需要HTTP基本身份验证。

事实上,我编写了一个扩展程序,可以使用onAuthRequired事件自动发送HTTP基本身份验证凭据。

官方Google Chrome网上商店免费提供: https://chrome.google.com/webstore/detail/basic-authentication-auto/dgpgkkfheijbcgjklcbnokoleebmeokn

onAuthRequired事件的用法示例:

sendCredentials = function(status)
{   
    console.log(status);
    return {username: "foo", password: "bar"};
}

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

您需要向清单文件添加正确的权限才能使用onAuthRequired。

"permissions": [ "http://*/*", "https://*/*", "webRequest", "webRequestBlocking", "tabs" ],

下载扩展程序并检查源代码以获得更好的方法。

即使请求是从另一个分机发起的,它也应该有效。

答案 1 :(得分:3)

这似乎是缺乏Chrome行为,其他人希望看到某些东西,因为 mozBakgroundRequest Chris突出显示,已经有bug report for that

一些开发人员在bugtracker中提出了(hackish)变通方法:

  • 使用网络工作者和超时来执行请求
  • 对背景页面做同样的事情

在这两种情况下,好处是它不会弹出一个身份验证框......但你永远不会知道它是真正的服务器超时还是401.(我没有测试过这些解决方法)。

答案 2 :(得分:0)

我认为这是不可能的。如果您使用浏览器的http客户端,则会提示用户输入401的凭据。

编辑:在mozilla土地上https://developer.mozilla.org/en/XMLHttpRequest查看“mozBackgroundRequest”。