[解決済み] ブラウザの認証ダイアログを表示しないようにするにはどうしたらいいですか?
質問
私のウェブアプリケーションには、AJAX呼び出しによって認証情報を送信するログインページがあります。ユーザーが正しいユーザー名とパスワードを入力した場合は、すべてがうまくいきますが、そうでない場合は、次のようになります。
- Web サーバーは、リクエストに整形式の Authorization ヘッダーが含まれていたものの、そのヘッダーの資格情報は正常に認証されなかったと判断します。
- Web サーバーは 401 ステータス コードを返し、サポートされている認証タイプをリストした 1 つ以上の WWW-Authenticate ヘッダーを含みます。
- ブラウザは、XMLHttpRequest オブジェクトへの私の呼び出しに対する応答が 401 であり、応答に WWW-Authenticate ヘッダーが含まれていることを検出します。そして、ユーザー名とパスワードを再度要求する認証ダイアログをポップアップ表示します。
これはステップ 3 まではすべて順調です。私はダイアログをポップアップさせたくないので、AJAXコールバック関数で401応答を処理したいのです。(たとえば、ログインページでエラーメッセージを表示することによって)もちろん、ユーザー名とパスワードを再入力してほしいのですが、ブラウザの醜いデフォルトの認証ダイアログではなく、私の親切で安心できるログインフォームを見てほしいのです。
ちなみに、私はサーバーを制御できないので、独自のステータス コード (すなわち、401 以外の何か) を返させることはオプションではありません。
認証ダイアログを表示しないようにする方法はありますか。特に、Firefox 2 以降で Authentication Required ダイアログを表示しないようにすることは可能ですか? 接続先を抑制する方法はありますか。 [ホスト]に接続する のダイアログを表示させない方法はありますか?
編集
著者からの追加情報(9月18日)。
ブラウザの認証ダイアログがポップアップすることの本当の問題は、ユーザーに十分な情報を与えないことであることを付け加えておきます。
ユーザーは、ログイン ページのフォームからユーザー名とパスワードを入力し、両方とも正しく入力したと信じて、送信ボタンをクリックするかエンターキーを押しました。ユーザーは、次のページに進むか、情報の入力に間違いがあるのでもう一度入力してくださいと言われることを期待しています。しかし、予期しないダイアログ ボックスが表示されます。
このダイアログでは した というユーザー名とパスワードの入力があったことを認識しません。また、問題が発生したので再試行するようにとの明確な指示もありません。代わりに、ダイアログ ボックスには、次のような不可解な情報が表示されます。 [レルム] です。 '." ここで [レルム] は、プログラマが好むような短いレルム名です。
Webブラウザの設計者は注意してください。ダイアログ自体が単にユーザーフレンドリーであれば、誰も認証ダイアログを抑制する方法を尋ねないでしょう。そのため 全体が ログイン フォームを使用している理由は、私たちの製品管理チームがブラウザーの認証ダイアログをひどいものだと当然考えているからです。
どのように解決するのですか?
ブラウザの HTTP クライアント実装を使用すると、常にそのダイアログがポップアップ表示されます。2 つのハックが思い浮かびます。
-
Flash はこれを違った方法で処理するので (私はまだ試していません)、Flash ムービーにリクエストをさせるのが有効かもしれません。
-
自分のサーバーでアクセスしているサービスの「プロキシ」を設定し、ブラウザが認識しないように認証ヘッダを少し修正させることができます。
関連
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] JavaScriptで要素のクラスを変更するにはどうすればよいですか?
-
[解決済み] JavaScriptで文字列をbooleanに変換するにはどうしたらいいですか?
-
[解決済み] JSONPとは何か、なぜ作られたのか?
-
[解決済み] Facebookがブラウザに統合されたDeveloper Toolsを無効にする方法を教えてください。
-
[解決済み] モバイルWeb HTML5フレームワークの選び方【終了しました
-
[解決済み] オブジェクトの配列からReactコンポーネントをレンダリングする
-
[解決済み] javascript includes() 大文字小文字を区別しない
-
[解決済み] ECMAScriptとは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] jqueryでdivの要素がオーバーフローしていないかチェックする
-
[解決済み] チェックボックスが選択されているかどうかを確認するjQuery
-
[解決済み] JavaScript のオブジェクトの配列を比較し、最小値/最大値を取得する
-
[解決済み] javascriptで文字列から関数を作成する方法はありますか?
-
[解決済み] 各オブジェクトに?重複
-
[解決済み] イテレータでmap()を使用する
-
[解決済み] jQueryのバージョン1、バージョン2、バージョン3の違いは何ですか?[クローズド]
-
[解決済み] Chrome拡張機能:popup.htmlを強制終了させる
-
[解決済み] これは純関数ですか?
-
[解決済み] HTTP 401 - 適切なWWW-Authenticateヘッダーの値は?