私のWebアプリケーションには、AJAX呼び出しを介して認証資格情報を送信するログインページがあります。ユーザーが正しいユーザー名とパスワードを入力した場合、すべてが正常ですが、そうでない場合は、次のようになります。
- Webサーバーは、要求に整形式のAuthorizationヘッダーが含まれていても、ヘッダー内の資格情報が正常に認証されていないと判断します。
- Webサーバーは401ステータスコードを返し、サポートされている認証タイプを一覧表示する1つ以上のWWW-Authenticateヘッダーを含みます。
- ブラウザは、XMLHttpRequestオブジェクトに対する私の呼び出しへの応答が401であり、応答にWWW-Authenticateヘッダーが含まれていることを検出します。次に、ユーザー名とパスワードの入力を求める認証ダイアログが表示されます。
これは、ステップ3まではすべて問題ありません。ダイアログをポップアップさせたくないので、AJAXコールバック関数で401応答を処理したいと思います。(たとえば、ログインページにエラーメッセージを表示します。)もちろん、ユーザーにユーザー名とパスワードを再入力してもらいたいのですが、ブラウザーの醜いデフォルトではなく、フレンドリーで安心できるログインフォームを表示してもらいたいです。認証ダイアログ。
ちなみに、私はサーバーを制御できないため、カスタムステータスコード(つまり、401以外のもの)をサーバーに返すことはできません。
認証ダイアログを非表示にする方法はありますか?特に、Firefox 2以降で[認証が必要]ダイアログを非表示にできますか?IE 6以降で[ホスト]に接続ダイアログを抑制する方法はありますか?
著者からの追加情報の編集
(9月18日):
ブラウザーの認証ダイアログがポップアップする実際の問題は、ユーザーに十分な情報が提供されないことです。
ユーザーは、ログインページのフォームからユーザー名とパスワードを入力したばかりで、両方を正しく入力したと考えており、送信ボタンをクリックするか、Enterキーを押しました。彼の期待は、彼が次のページに移動するか、おそらく彼が自分の情報を間違って入力したので再試行する必要があると言われることです。ただし、代わりに予期しないダイアログボックスが表示されます。
ダイアログは、彼がユーザー名とパスワードを入力したという事実を確認しません。問題があったこと、そして彼が再試行する必要があることを明確に述べていません。代わりに、ダイアログボックスには、「サイトによると:' [レルム] '」などの不可解な情報がユーザーに表示されます。ここで、 [レルム]は、プログラマーだけが愛することができる短いレルム名です。
Webブラウザの設計者は注意します。ダイアログ自体が単によりユーザーフレンドリーである場合、認証ダイアログを抑制する方法を誰も尋ねません。私がログインフォームを使用している理由は、製品管理チームがブラウザの認証ダイアログをひどいものと正しく見なしているためです。