Какой правильный код статуса HTTP будет возвращен, если пользователь попытается войти в систему с неправильным именем пользователя/паролем, но правильный формат?

Здесь вы найдете аналогичный вопрос: Какой подходящий код состояния HTTP для возврата службой API REST для отказа проверки?

В ответе в приведенном выше разделе говорится, что "например, если URI должен иметь дату ISO-8601, и вы обнаружите, что он в неправильном формате или относится к 31-му февраля, тогда вы вернете HTTP 400. То же самое если вы ожидаете хорошо сформированного XML в теле объекта и не разбираетесь."

Однако, что произойдет, если пользователь отправит правильно отформатированные данные? Под этим я подразумеваю, что пользователь представил строчную алфавитную строку/текст для имени пользователя и пароля (что совершенно верно для моего приложения). Единственная проблема заключается в том, что пароль не совпадает с именем пользователя. В этом случае 400 будет некорректным, поскольку он является вполне корректным синтаксисом и хорошо сформированным.

A 401 будет неправильным (как предлагается здесь: Какой код состояния HTTP для указания имени пользователя или пароля был неверным?), поскольку пользователь не пытается получить доступ к какой-либо странице, он просто пытается войти и ввести данные, которые не совпадают.

Если вы оглянетесь на первое сообщение, с которым я связался, во втором ответе говорится, что 422 является правильным ответом (и это выглядит правильно для меня), однако я использую Django Rest Framework, а 422 не является частью статуса коды (список кодов состояния, которые являются частью DRF, можно найти здесь: http://www.django-rest-framework.org/api-guide/status-codes/#client-error-4xx)

404 также выглядит не так, потому что данные успешно приняты и не отклонены.

С учетом сказанного, каков реальный правильный ответ, который следует использовать?

Ответ 1

Правильный код HTTP на самом деле будет 401. Из RFC:

Код состояния 401 (Несанкционированный) указывает, что запрос не был применен, поскольку ему не хватает действительных учетных данных для целевого ресурса. Сервер, генерирующий ответ 401, ДОЛЖЕН отправить поле заголовка WWW-Authenticate (раздел 4.1), содержащее хотя бы один вызов, применимый к целевому ресурсу.

Если запрос включал аутентификационные данные, тогда ответ 401 указывает, что для этих учетных данных было отказано в авторизации. Пользовательский агент МОЖЕТ повторить запрос с новым или замененным заголовком заголовка полномочий (раздел 4.2).

Ответ 3

Я думаю, что будет хорошо установить код ответа 200. Чтобы предотвратить атаку по списку слов. В огромных массах киберпреступник не смог определить, какие запросы и ответы верны)))