我目前正在开发Chrome扩展程序,我需要访问一些受http-auth保护的资源(webdav)。 HTTP身份验证使用(在最好的情况下)摘要身份验证。
我可以使用https://login:password@domain.tld/path/to/ressource表单直接在ajax请求中执行身份验证。
问题是:如果登录名/密码错误,我不能获得401状态(未经授权),Chrome会弹出常规验证对话框。这是我不想要的,因为它让用户感到困惑,我无法从这里保存凭据。
编辑:我面临的另一个用例是:我想检查一个资源是否受密码保护而不试图提供凭据来实际访问它。如何在不弹出Chrome的授权框的情况下抓住401的想法?
答案 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”。