11

現在、Chrome 拡張機能を開発しています。http 認証で保護されたリソース (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 Web ストアで無料で入手できます: 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

それは実際にはクロムの動作に欠けているようです.他の人々は、クリスが強調したmozBakgroundRequestとして何かを見たいと思っています.そのためのバグレポートはすでにあります.

一部の開発者がバグトラッカーで提案している (ハック的な) 回避策があります。

  • Webworker とタイムアウトを使用してリクエストを実行する
  • 背景ページと同じことを行います

どちらの場合も、認証ボックスが表示されないという利点があります...ただし、それが実際のサーバーのタイムアウトなのか 401 なのかはわかりません (これらの回避策はテストしていません)。

于 2010-10-13T23:19:52.617 に答える
0

これは不可能だと思います。ブラウザのhttpクライアントを使用している場合は、401の資格情報の入力をユーザーに求めます。

編集:モジラランドhttps://developer.mozilla.org/en/XMLHttpRequestで「mozBackgroundRequest」をチェックしてください。

于 2010-10-12T13:20:59.527 に答える