1. ホーム
  2. javascript

[解決済み] ブラウザの認証ダイアログを表示しないようにするにはどうしたらいいですか?

2023-04-12 04:54:20

質問

私のウェブアプリケーションには、AJAX呼び出しによって認証情報を送信するログインページがあります。ユーザーが正しいユーザー名とパスワードを入力した場合は、すべてがうまくいきますが、そうでない場合は、次のようになります。

  1. Web サーバーは、リクエストに整形式の Authorization ヘッダーが含まれていたものの、そのヘッダーの資格情報は正常に認証されなかったと判断します。
  2. Web サーバーは 401 ステータス コードを返し、サポートされている認証タイプをリストした 1 つ以上の WWW-Authenticate ヘッダーを含みます。
  3. ブラウザは、XMLHttpRequest オブジェクトへの私の呼び出しに対する応答が 401 であり、応答に WWW-Authenticate ヘッダーが含まれていることを検出します。そして、ユーザー名とパスワードを再度要求する認証ダイアログをポップアップ表示します。

これはステップ 3 まではすべて順調です。私はダイアログをポップアップさせたくないので、AJAXコールバック関数で401応答を処理したいのです。(たとえば、ログインページでエラーメッセージを表示することによって)もちろん、ユーザー名とパスワードを再入力してほしいのですが、ブラウザの醜いデフォルトの認証ダイアログではなく、私の親切で安心できるログインフォームを見てほしいのです。

ちなみに、私はサーバーを制御できないので、独自のステータス コード (すなわち、401 以外の何か) を返させることはオプションではありません。

認証ダイアログを表示しないようにする方法はありますか。特に、Firefox 2 以降で Authentication Required ダイアログを表示しないようにすることは可能ですか? 接続先を抑制する方法はありますか。 [ホスト]に接続する のダイアログを表示させない方法はありますか?


編集

著者からの追加情報(9月18日)。

ブラウザの認証ダイアログがポップアップすることの本当の問題は、ユーザーに十分な情報を与えないことであることを付け加えておきます。

ユーザーは、ログイン ページのフォームからユーザー名とパスワードを入力し、両方とも正しく入力したと信じて、送信ボタンをクリックするかエンターキーを押しました。ユーザーは、次のページに進むか、情報の入力に間違いがあるのでもう一度入力してくださいと言われることを期待しています。しかし、予期しないダイアログ ボックスが表示されます。

このダイアログでは した というユーザー名とパスワードの入力があったことを認識しません。また、問題が発生したので再試行するようにとの明確な指示もありません。代わりに、ダイアログ ボックスには、次のような不可解な情報が表示されます。 [レルム] です。 '." ここで [レルム] は、プログラマが好むような短いレルム名です。

Webブラウザの設計者は注意してください。ダイアログ自体が単にユーザーフレンドリーであれば、誰も認証ダイアログを抑制する方法を尋ねないでしょう。そのため 全体が ログイン フォームを使用している理由は、私たちの製品管理チームがブラウザーの認証ダイアログをひどいものだと当然考えているからです。

どのように解決するのですか?

ブラウザの HTTP クライアント実装を使用すると、常にそのダイアログがポップアップ表示されます。2 つのハックが思い浮かびます。

  1. Flash はこれを違った方法で処理するので (私はまだ試していません)、Flash ムービーにリクエストをさせるのが有効かもしれません。

  2. 自分のサーバーでアクセスしているサービスの「プロキシ」を設定し、ブラウザが認識しないように認証ヘッダを少し修正させることができます。