web-dev-qa-db-ja.com

HTTP 401-適切なWWW-Authenticateヘッダー値は何ですか?

現在作業中のアプリケーションには、セッションタイムアウト値があります。ユーザーがこの値(ユーザーが次にロードしようとするページ)より長く対話していない場合、ログインするように求められます。

行われたすべての要求は、AJAX呼び出しを含むこのメカニズムを介してルーティングされます。もともとログインページで200ヘッダーを送信していましたが、200 [応答]が送信されるとコードが実行され、これらのRPC呼び出しから返されるデータのほとんどはJSONまたは生のJavaScriptであるため、AJAX評価されます(尋ねないでください:|)。

JSONパーサーはHTMLログインページを消費しようとしないため、401の方が優れていると提案しました。

ただし、 仕様を読む の場合、WWW-Authenticateフィールドも送信する必要があることに気付きました。

このフィールドに適した値は何ですか? Application Loginで十分ですか?

102
Will Morgan

HTTP基本認証を示すと、次のようなものが返されます。

WWW-Authenticate: Basic realm="myRealm"

一方、Basicはスキームであり、残りはそのスキームに大きく依存しています。この場合、レルムは、ユーザーIDとパスワードの入力を求めるときにユーザーに表示できるリテラルをブラウザに提供するだけです。

ただし、Basic Authを使用するとセッションの有効期限が切れるわけではないため、明らかにBasicは使用していません。フォームベースの認証の何らかの形式を使用していると思います。

回想から、Windows Challenge Responseは異なるスキームと異なる引数を使用します。

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

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

本当に良いユーザー+ AJAXエクスペリエンスを得るには、セッションが期限切れになったことを検出したAJAXリクエストに固執するスクリプトを取得し、ポップアップを介して再ログインリクエストを実行し、成功すると、元のAJAXリクエストを再送信し、通常どおり続行します。

5分ごとにスクリプトをサイトにヒットさせるだけのチートは避けてください。これにより、セッションの有効期限が切れる原因となるセッションを維持することができます。

他の選択肢はAJAXリクエストを書き込むことですが、それはユーザーエクスペリエンスの低下です。

64
Swanny

いいえ、使用する認証方法(通常は「基本」)と認証領域を指定する必要があります。リクエストとレスポンスの例については、 http://en.wikipedia.org/wiki/Basic_access_authentication をご覧ください。

RFC 2617-HTTP認証:基本認証およびダイジェストアクセス認証 を読むこともできます。

6
Pär Wieslander