web-dev-qa-db-ja.com

間違った資格情報で実行されたログイン要求に対して、a REST APIはどのステータスコードを返す必要がありますか?

HTTPステータスコードの意味について、たくさんの答えと説明を見つけました。私の質問は、具体的には、ログインエンドポイントへのPOSTリクエストで、たとえばユーザー名とパスワードを要求し、間違ったものが提供されるシナリオについてです。

いくつかの考え:

400 Bad Responseこのコードは、リクエストが構文的に正しくなく、サーバーによって理解されていないことを示しているため、適切ではないと思いますが、ここではそうではありません。ログインデータは意味的に正しくありません。

401 Unauthorizedこれが私にとって難しい部分です。 401が認証ヘッダーを必要とする要求でのみ発生する可能性がある場合、これは正しくありません。ただし、認証(ヘッダーまたは本文のいずれかとして)を必要とするすべての要求で401が発生する可能性がある場合は、401が候補になります。

403 Forbidden通常、ユーザーがすでに認証され、システムに認識されているが、アクセスが許可されていないリソースを要求した場合、403が返されます。ログイン前にユーザーが認証されていないことは間違いありません。認証されていないユーザーの403のセマンティクスがあるかどうかはわかりません。

私は答えを言われたり、あなたの考えを聞いてうれしいです。

7
Peter F

私の質問は、特にログインエンドポイントへのPOSTリクエストについてです。これは、たとえばユーザー名とパスワードを要求し、間違ったものが提供されるシナリオです。

資格情報の送信方法によって異なります。

  • HTTP認証Authorization ヘッダーで資格情報を送信する)を使用している場合は、 401 資格情報が無効であることを示します。

  • リクエスト本文で認証情報を送信する場合(たとえば、ユーザー名とパスワードを含むJSON)、 401 は最適なステータスコードではないようです(realHTTP認証ではない場合)。この状況では、 403 代わりに説明的な応答ペイロードを使用します。


403 ステータスコードを使用して、認証の問題を示したり、ユーザーがアクションを実行できないことを示したりすることもできます。

3
cassiomolin

ユーザーが認証を試みているが、無効な資格情報を提供している場合、基本認証を使用しているかどうかに関係なく、応答のステータスは401である必要があります。 401は認証が失敗したことを示しますが、ユーザーは要求を変更して再試行できます。

ユーザーが認証されているが、要求されたリソースへのアクセスが許可されていない場合、応答のステータスは403である必要があります。403は、ユーザーがリソースへのアクセスを禁止されていることを示します。ユーザーがリクエストをどのように変更しても、許可されたアクセス。

エンドポイントで資格情報がリクエストの本文に含まれている必要があるシナリオ(これはお勧めしません)で、リクエストの本文が仕様を満たしていない場合は400を返す必要があります。ただし、資格情報を渡すためにヘッダーフィールドを使用することを強くお勧めします。

5
Joshua Jones

401HTTP認証を使用する場合の無効な資格情報

403ログインしているが、許可されていないエリアにアクセスしようとしているユーザーの場合

1
fv_dev