none
BASIC認証(IAuthenticate)について、既存のBasic認証画面が出てしまう問題 RRS feed

  • 質問

  • IEコンポーネントの内部で使われているBASIC認証について質問です。

    IAuthenticateを利用し、既存のBasic認証画面を隠していますが、たまに、Basic認証画面が出てしまう時があります。

    正しい認証情報を送っても、サーバーの不具合なのか、「401エラー」が発生した時によく見られます。

    クライアント側ではどんな時でも既存のBasic認証画面を出したくないですが、その方法ってありますか?

    2011年11月28日 8:30

回答

  • 書き込みを見る限り、IAuthenticateでは今回のケースはうまくいかないように見えました。
    ですので、IAuthenticateを使うのはやめて、
     
    自分でBasic認証に必要なHTTPヘッダを付与するようにしてみるというのは、可能でしょうか?
    Authorizationヘッダにユーザ名&パスをBase64エンコードしてやればいけるはず。
     
    以下のようなものとか
    http://social.msdn.microsoft.com/Forums/ar/winforms/thread/b7bd377a-60ef-4581-81e8-47076ac39848
    AddRequestHeaders(MFC)とかどうでしょうか。 

    で、これだと、CSSとかAjaxのリクエストに認証ヘッダが付与されないように思えたため、
    wininetのAPIをハンドリングしてやれば、どんなときでもAuthorizationヘッダが付与することができる気がしたのです。 
    他によりよりハンドリング方法があれば、そちらが良いと思っています。 

    2011年11月30日 12:45
  • 動作モードの変更によって、何か変化は見られないでしょうか?
    http://tabbrowser.info/ie9mode.html
     

    パケットキャプチャのログを見ると認証はちゃんと付けられていました。

    また、同じページで、一部は認証成功になり、一部は認証エラーになる時に認証ダイアログが出ることを確認しました。

    前回投稿のスレッドのパケットキャプチャログを見て思ったことは、
    おしゃるように、
    HTMLとJSファイルの取得の際には認証情報は付与されていましたが、
    XHR(XmlHttpRequest)でのリクエストには、認証情報は付与されていないのだと思いました。
    1回の画面遷移で複数回のリクエストが飛ぶような画面であり、その中の一部で認証情報が付与されていないため、認証ダイアログが出てしまうようですね。
     
    ※同じバージョンかは不明ですが、キャプチャデータと同様と見られるコンテンツが使われているバッファロールータのJSソースの確認を行いました

     

    以下が気になっています。
    ・認証情報が付与されない条件は、XmlHttpRequestのときのみなのか、それとも、何かランダムだったりするのか!?
    ・認証情報が付与されない原因としてIAuthenticateとのキャッチのタイミングや回数はどのようになっているのか!?

    • 回答としてマーク 田中夢 2011年12月16日 8:50
    2011年12月6日 3:03
  • # 難しすぎて質問者さんには理解できなかったのかなぁ…

    HTTPについて説明すると

    1. ブラウザーからWebサーバーにコンテンツをリクエスト
    2. Webサーバーからブラウザーに401エラー
    3. (401エラーを受けて)ブラウザーは認証ダイアログを出す
    4. ブラウザーからWebサーバーに3.で得られた認証情報を付けて再度コンテンツをリクエスト
    5. 認証情報が間違っていれば2.に戻る、正しければWebサーバーからブラウザーに200 OKと共にコンテンツを返す

    という流れです。

    この流れの中でIAuthenticateがどこで動作しているか把握できていますか? 把握できていれば「「401エラー」が発生した時によく見られます」という記述にはならないと思いました。

    • 回答としてマーク 田中夢 2011年12月16日 8:49
    2011年11月29日 4:56

すべての返信

  • HTTPについての知識が不足されていると思われます。Basic認証と401エラーの関係を理解してください。
    2011年11月28日 8:55
  • IAuthenticateを利用し、既存のBasic認証画面を隠していますが、たまに、Basic認証画面が出てしまう時があります。
    手元では確認出来ていませんが、そ~なのですね。
    前回の投稿を見るとXHRのときに発生することがあるのかなと思いましたが、再現しませんでした。 
     
    クライアント側ではどんな時でも既存のBasic認証画面を出したくないですが、その方法ってありますか?
     分かりませんが、「wininet hook」検索で出てくるものではうまくいきませんかね?
    2011年11月28日 14:34
  • 回答有難うございます。

    私の環境では、アプリケーションとExplorerを同時に起動し、Buffaloのルーター管理ページにアプリケーションでアクセスしている時にExplorerでログアウトの作業を行うとよく起こります。

    自分の検索能力不足なのか、「wininet hook」で検索してもなかなか見つかりませんね。。。

    とりあえず、「wininet hook」で調査してみます。

    2011年11月29日 1:57
  • # 難しすぎて質問者さんには理解できなかったのかなぁ…

    HTTPについて説明すると

    1. ブラウザーからWebサーバーにコンテンツをリクエスト
    2. Webサーバーからブラウザーに401エラー
    3. (401エラーを受けて)ブラウザーは認証ダイアログを出す
    4. ブラウザーからWebサーバーに3.で得られた認証情報を付けて再度コンテンツをリクエスト
    5. 認証情報が間違っていれば2.に戻る、正しければWebサーバーからブラウザーに200 OKと共にコンテンツを返す

    という流れです。

    この流れの中でIAuthenticateがどこで動作しているか把握できていますか? 把握できていれば「「401エラー」が発生した時によく見られます」という記述にはならないと思いました。

    • 回答としてマーク 田中夢 2011年12月16日 8:49
    2011年11月29日 4:56
  • 回答有難うございます。

    すみません。質問の内容が正しく伝えられなかったみたいですね。

    1. ラウザーからWebサーバーにコンテンツをリクエスト
    2. Webサーバーからブラウザーに401エラー
    3. (401エラーを受けて)ブラウザーは認証ダイアログを出す→IAuthenticateで認証画面をキャッチし、隠す
    4. ブラウザーからWebサーバーに3.で得られた認証情報を付けて再度コンテンツをリクエスト
    5. 認証情報が間違っていれば2.に戻る、正しければWebサーバーからブラウザーに200 OKと共にコンテンツを返す

    たまに5番で、認証情報が正しいのに、2番に戻る時があります。

    認証情報を入れても、「401エラー」が発生する時、よく見られます。

    それで、隠れているはずの認証ダイアログが出て、アプリが動かなくなりまして、困っています。

    2011年11月29日 5:56
  • 書き込みを見る限り、IAuthenticateでは今回のケースはうまくいかないように見えました。
    ですので、IAuthenticateを使うのはやめて、
     
    自分でBasic認証に必要なHTTPヘッダを付与するようにしてみるというのは、可能でしょうか?
    Authorizationヘッダにユーザ名&パスをBase64エンコードしてやればいけるはず。
     
    以下のようなものとか
    http://social.msdn.microsoft.com/Forums/ar/winforms/thread/b7bd377a-60ef-4581-81e8-47076ac39848
    AddRequestHeaders(MFC)とかどうでしょうか。 

    で、これだと、CSSとかAjaxのリクエストに認証ヘッダが付与されないように思えたため、
    wininetのAPIをハンドリングしてやれば、どんなときでもAuthorizationヘッダが付与することができる気がしたのです。 
    他によりよりハンドリング方法があれば、そちらが良いと思っています。 

    2011年11月30日 12:45
  • 回答有難うございます。

    パケットキャプチャのログを見ると認証はちゃんと付けられていました。

    また、同じページで、一部は認証成功になり、一部は認証エラーになる時に認証ダイアログが出ることを確認しました。

    IAuthenticateをやめてしまうと他のところも修正箇所が大きく、他の方法を換えるのは難しいですと思いますが、ご意見ありがとうございます。

    また、いろんな調査を行いたいと思います。

    2011年12月2日 9:01
  • 動作モードの変更によって、何か変化は見られないでしょうか?
    http://tabbrowser.info/ie9mode.html
     

    パケットキャプチャのログを見ると認証はちゃんと付けられていました。

    また、同じページで、一部は認証成功になり、一部は認証エラーになる時に認証ダイアログが出ることを確認しました。

    前回投稿のスレッドのパケットキャプチャログを見て思ったことは、
    おしゃるように、
    HTMLとJSファイルの取得の際には認証情報は付与されていましたが、
    XHR(XmlHttpRequest)でのリクエストには、認証情報は付与されていないのだと思いました。
    1回の画面遷移で複数回のリクエストが飛ぶような画面であり、その中の一部で認証情報が付与されていないため、認証ダイアログが出てしまうようですね。
     
    ※同じバージョンかは不明ですが、キャプチャデータと同様と見られるコンテンツが使われているバッファロールータのJSソースの確認を行いました

     

    以下が気になっています。
    ・認証情報が付与されない条件は、XmlHttpRequestのときのみなのか、それとも、何かランダムだったりするのか!?
    ・認証情報が付与されない原因としてIAuthenticateとのキャッチのタイミングや回数はどのようになっているのか!?

    • 回答としてマーク 田中夢 2011年12月16日 8:50
    2011年12月6日 3:03
  • こんにちは。
    フォーラム オペレーターの田中夢です。
     
    佐祐理 さん、 (´・ω・`)  さん
    アドバイスをいただき、ありがとうございます。
     
    goodman99 さん
    最後に投稿されてからしばらく経過しましたが、その後 (´・ω・`)  さんの投稿をご覧になっていただけましたでしょうか?
     
    今回、佐祐理 さんと  (´・ω・`)  さんの投稿をトラブルシューティングの参考にしていただけたのではないかと思われますので、勝手ながら私のほうで [回答としてマーク] とさせていただきますね。
     
     
    今後とも弊社の MSDN/TechNet フォーラムをどうぞよろしくお願いします。
    ---------------------------------------------------------------------
    日本マイクロソフト株式会社 フォーラム オペレーター 田中夢
    2011年12月16日 8:49