11

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

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

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

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

关于如何在不弹出 Chrome 身份验证框的情况下捕获 401 的任何想法?

4

3 回答 3

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" ],

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

即使请求是从另一个扩展程序发起的,它也应该可以工作。

于 2014-01-11T14:13:07.390 回答
3

似乎确实缺乏 chrome 行为,其他人希望看到mozBakgroundRequest Chris 突出显示的内容,已经有一个错误报告

bugtracker 中有一些开发人员建议的(hackish)解决方法:

  • 使用 webworker 和超时来执行请求
  • 对背景页面做同样的事情

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

于 2010-10-13T23:19:52.617 回答
0

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

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

于 2010-10-12T13:20:59.527 回答