11


9

Chrome拡張機能でHTTP認証ポップアップを回避する(ダイジェスト)

現在、Chrome拡張機能を開発しています。http-authで保護されたリソース(webdav)にアクセスする必要があります。 HTTP認証は(最良の場合)ダイジェスト認証を使用しています。

https:// login:[email protected]/path/to/ressourceフォームを使用して、ajaxリクエストで直接認証を行うことができます。

問題は、ログイン/パスワードが間違っている場合、401ステータス(不正)を取得できないだけで、Chromeは通常の認証ダイアログを表示します。 これはユーザーを混乱させ、ここから資格情報を保存することはできません。

編集:私が直面した別のユースケースは次のとおりです。実際にアクセスするための資格情報を提供しようとせずに、リソースがパスワードで保護されているかどうかを確認したいです。

Chromeの認証ボックスをポップせずに401をキャッチする方法に関するアイデアはありますか?

3 Answer


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: [""]}, ["blocking"]);

onAuthRequiredを使用するには、マニフェストファイルに適切な権限を追加する必要があります。

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

拡張機能をダウンロードし、ソースコードを確認して、より良いアプローチを見つけてください。

要求が別の拡張機能から開始された場合でも機能するはずです。


3


クロームの振る舞いに欠けているようです。他の人は、mozBakgroundRequest Chrisが強調したように、すでにhttp://code.google.com/p/chromium/issues/detail?id=31582[bugそのための報告]。

バグトラッカーの開発者によって提案された(ハック的な)回避策があります:

  • Webworkerとタイムアウトを使用してリクエストを実行します

  • 背景ページでも同じことをする

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


0


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