web-dev-qa-db-ja.com

ユーザーが間違ったユーザー名/パスワードを使用してログインしようとした場合に返す適切なHTTPステータスコードは何ですか?

同様の質問がここに投稿されています: 検証エラーのためのREST APIサービス?

上記のスレッドの答えは、「URIの日付がISO-8601であると想定され、間違った形式であるか2月31日を参照している場合、HTTP 400を返すことになります。エンティティ本体の整形式XMLであり、解析に失敗します。」

ただし、ユーザーが正しい形式のデータを送信するとどうなりますか?つまり、ユーザーはユーザー名とパスワードのプレーンなアルファベット文字列/テキストを送信しました(これは私のアプリケーションに完全に有効です)。唯一の問題は、パスワードがユーザー名と一致しなかったことです。この場合、400は完全に有効な構文であり整形式であるため、400は正しくありません。

401は正しくありません(ここで提案されているように、 ユーザー名またはパスワードを言うHTTPステータスコードは間違っていましたか? )ユーザーはページにアクセスしようとしておらず、単にログインしてデータを入力しようとしているためです一致しません。

私がリンクした最初の投稿を振り返ると、2番目の答えは422が正しい応答であると述べています(そして、私には正しいように見えます)が、Django Rest Framework and 422はステータスコードの一部ではありません(DRFの一部であるステータスコードのリストは、ここにあります: http://www.Django-rest-framework.org/api-guide/status-codes/ #client-error-4xx

また、データが正常に受け入れられ、拒否されないため、404は正しく見えません。

とはいえ、実際に使用すべき正しい応答は何ですか?

38
user2719875

正しいHTTPコードは実際には401です。From RFC

401(Unauthorized)ステータスコードは、ターゲットリソースの有効な認証資格情報がないため、リクエストが適用されていないことを示します。 401応答を生成するサーバーは、ターゲットリソースに適用可能な少なくとも1つのチャレンジを含むWWW-Authenticateヘッダーフィールド(セクション4.1)を送信する必要があります。

要求に認証資格情報が含まれていた場合、401応答はそれらの資格情報の承認が拒否されたことを示します。ユーザーエージェントは、新しいまたはAuthorizationヘッダーフィールドを置き換えました(セクション4.2)。

55
sjagr
3
Tony Arnold

応答ステータスコード200を設定するとよいと思います。ワードリスト攻撃を防ぐため。巨大な大規模なサイバー犯罪者は、どのリクエストとレスポンスが正しいかを特定できませんでした)))

0
Levon