私の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ブラウザーの設計者は注意します。ダイアログ自体が単によりユーザーフレンドリーである場合、認証ダイアログを抑制する方法を誰も尋ねません。全体私がログインフォームをしていた理由は、私たちの製品管理チームは間違いなくブラウザの認証ダイアログがひどいことを考慮することです。