1. ホーム
  2. http-headers

[解決済み] HTTP 401 - 適切なWWW-Authenticateヘッダーの値は?

2022-09-22 06:45:13

質問

私が現在取り組んでいるアプリケーションは、セッションタイムアウトの値を持っています。ユーザーがこの値よりも長い間操作しなかった場合、次に読み込もうとしたページで、ログインするよう促されます。

すべてのリクエストは、AJAX 呼び出しを含む、このメカニズムを通してルーティングされます。もともと私たちはログイン ページで 200 ヘッダーを送信していましたが、200 レスポンスが送信されるとコードが実行され、これらの RPC 呼び出しから返されるほとんどのデータは JSON または評価される生の JavaScript なので、AJAX でいくつかの問題が発生します (聞かないでください :_)。

私たちのJSONパーサーはHTMLログインページを消費しようとしないので、401がより良いことを提案しました... :)

いつ 仕様書を読むと を読んでいて気づいたのですが WWW-Authenticate フィールドも送信しなければならないことに気づきました。

このフィールドにはどのような値を設定すればよいのでしょうか?ウィル Application Login で十分でしょうか?

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

HTTP Basic Authenticationを指示すると、次のようなものが返されます。

WWW-Authenticate: Basic realm="myRealm"

ここで Basic はスキームであり、残りの部分はそのスキームに大きく依存します。この場合、realm はユーザー ID とパスワードの入力を促す際にユーザーに表示されるリテラルをブラウザに提供するだけです。

しかし、Basic Auth を使用している場合、セッションの有効期限を設定する意味がないため、明らかに Basic を使用していません。何らかのフォームベースの認証を使っているのだと思います。

記憶では、Windows チャレンジレスポンスは異なるスキームと異なる引数を使用します。

トリックは、どのスキームをサポートし、それに対してどのように応答するかを決定するのは、ブラウザ次第であるということです。

フォームベースの認証を使用している場合、私の直感では、200 + 再ログインページのまま、ブラウザは無視するが AJAX が識別できるカスタム ヘッダーを追加することです。

本当に優れたユーザー + AJAX エクスペリエンスのために、セッションが期限切れになったことを発見した AJAX リクエストをスクリプトで保持し、ポップアップで再ログイン要求を出し、成功したらオリジナルの AJAX 要求を再送信して通常通り続行します。

セッションを維持するためにスクリプトを 5 分ごとにサイトにヒットさせるようなごまかしは避けてください。

他の選択肢はAJAXリクエストを燃やすことですが、これは貧弱なユーザーエクスペリエンスです。