11

我目前正在開發一個Chrome擴展,我需要訪問一些http-auth保護的資源(webdav)。 HTTP認證使用(在最好的情況下)摘要認證。避免在Chrome擴展中使用HTTP驗證彈出(摘要)

我能夠使用https://login:[email protected]/path/to/ressource表單直接在ajax請求中執行auth。

問題是:如果登錄名/密碼錯誤,我不能獲得401狀態(未經授權),Chrome會彈出常規身份驗證對話框。我不想讓用戶感到困惑,我無法從這裏保存證書。

編輯:我面臨的另一個用例是:我想檢查一個資源是否密碼保護,而不嘗試提供證書來實際訪問它。

如何在沒有彈出Chrome的驗證框的情況下捕捉401的任何想法?

回答

4

Google Chrome團隊已在Google Chrome 22中實施onAuthRequired事件,因此現在可以檢測何時需要HTTP基本身份驗證。

事實上,我寫了一個擴展,它使用onAuthRequired事件自動發送HTTP基本認證憑證。

它可以在谷歌官方的Chrome網絡商店免費:onAuthRequired事件的 https://chrome.google.com/webstore/detail/basic-authentication-auto/dgpgkkfheijbcgjklcbnokoleebmeokn

用例:

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

下載擴展並檢查源代碼以獲得更好的方法。

即使請求是從另一個分機啓動的,它也應該可以工作。

+0

看起來不錯,謝謝!請有人確認/體弱嗎? (我的頭腦現在遠離那些專注,所以我不會自己)。 – 2014-01-11 17:19:00

+1

嗨,我想讓你知道這個代碼需要更新。 你需要返回一個像這樣的對象:return {authCredentials:{username:'XXX',password:'XXX'}} 至少這對我來說是成功的。 – 2016-02-25 10:54:43

0

我認爲這是不可能的。如果你使用的瀏覽器的HTTP客戶端,那麼它會提示用戶在401上的憑據。

編輯:在mozilla土地https://developer.mozilla.org/en/XMLHttpRequest檢查出「mozBackgroundRequest」。

+0

我擔心如此:-x。太糟糕了,似乎沒有辦法從擴展中順利訪問webdav *。 – 2010-10-13 12:30:40

3

這確實似乎是一個缺乏鉻的行爲,其他人都希望看到的東西作爲mozBakgroundRequest克里斯強調的,已經是一個bug report for that

有由錯誤追蹤一些開發商建議(hackish的)解決方法:

  • 使用webworker和超時執行請求
  • 做同樣的背景頁

在這兩種情況下,好處是它不會彈出驗證框......但是您永遠不會知道它是真正的服務器超時還是401(我沒有測試過這些解決方法)。