web-dev-qa-db-ja.com

RESTful HTTP APIでの認証、401 WWW-Authenticate

Webアプリケーションにデータを提供するRESTfulサービスを作成しています。これに関して2つの関連する質問があります。

1.不正なリクエストに対処する方法

次のコードでリクエストに応答するつもりです。

  • リソースは開いていて見つかりましたか? 200 OK
  • リソースにアクセスするには認証が必要ですか? 401 Unauthorized
  • リソースのカテゴリにアクセスできませんか? 403 Forbidden
  • リソースのカテゴリにはアクセスできますが、この特定のリソースにはアクセスできませんか? 404 Not Found。アクセスできないリソースの存在を人々が知ることを防ぎます。
  • リソースは存在しませんか? 404見つかりません

これは、RESTfulサービスが動作するための推奨される方法ですか?

2.何WWW-Authenticateヘッダーは401応答で提供する必要がありますか?

Wikipedia (おそらく最も正確なリソースではないが、私にとってはうまくいく)で、401応答mustWWW-Authenticateヘッダー、しかし、さらに検索してみると、この値が何を意味し、何をすべきかを述べたリソースを実際に見つけることができませんでした。

このヘッダーに関するいくつかのSO質問とフォーラムトピックを見つけましたが、それらはすべてOAuthについてのものであるように見えます。

このヘッダーに含まれる正しい値は何ですか?

36
Aidiakapi

質問に答えるには:

不正なリクエストの処理方法

あなたがそれを説明した方法は、RESTfulサービスのためにかなり推奨される方法です。私の知る限り、それはまったく悪いことではありません。

401応答が提供するWWW-Authenticateヘッダーは何ですか?

一般的に、WWW-Authenticateヘッダーは、サーバーが受け入れる認証の種類をクライアントに伝えます。クライアントが無許可のリクエストを行った場合、つまりAuthorizationヘッダーが欠落しているか無効なリクエストを送信している場合、サーバーはWWW-Authenticateクライアントに、どの認証スキーム(つまり、Basic、Digest、またはOAuth)を受け入れるか、およびどのレルムについて伝えるか。

サーバー側でのある種の識別質問またはチャレンジ、つまり「あなたは誰ですか?」のようなものを想像してください。または「次の方法で資格情報を提供して、あなたが誰であるかを証明してください!」。

例えば: WWW-Authenticate: Basic realm="My App"

ここで、サーバーは、Basicという名前の認証スキームを使用していることをクライアントに伝えます。レルムは、サーバー上の保護されたスペースを識別する文字列にすぎません。

22
benjiman

私の調査(グーグル)に基づいて、Newauth realm = "use login token"を送信することにしました。

Webサイト http://greenbytes.de/tech/tc/httpauth/#unknown にさまざまな認証方法のテストケースがあり、「認証トークンの取得」を説明するものが見つからなかったため、それは「Newauth」です。

私にとっても重要です:これは、クライアント側でログインプロンプトを作成しません。

0
sigi