OAuth 2.0 - Почему сервер авторизации возвращает 400 вместо 401, когда учетные данные владельца ресурса недействительны?

При использовании типа предоставления пароля владельца ресурса, кажется, что сервер авторизации должен отвечать кодом статуса HTTP 400 (Bad Request), если токен доступа не может быть предоставлен из-за того, что владелец ресурса вводит неверный пароль. Я пришел к выводу, что это основано на моем понимании RFC 6749, раздел 5.2 **, в котором говорится: "Сервер авторизации отвечает кодом статуса HTTP 400 (Bad Request)" в случае, когда токен не может быть предоставлен из-за недействительного_grant. Причины, перечисленные для invalid_grant, включают учетные данные владельца ресурса, которые недействительны.

Правильно ли я понимаю? Если да, то почему вместо HTTP 401 (неавторизованный) возвращается? При базовой аутентификации неверный пароль приводит к ошибке 401. Почему OAuth 2.0 предусматривает возврат 400? Это потому, что 401 зарезервирован для недопустимых учетных данных клиента?

** См. http://tools.ietf.org/html/rfc6749#section-5.2

Ответ 1

Мне тоже было интересно, но кажется, что ответ 401 требует возврата заголовка WWW-Authenticate в ответ, который не имеет смысла в этом потоке OAuth. Это ссылка в поток, где разработчики спецификаций обсуждают эту проблему.

И для полноты (tl; dr): здесь - это конкретное сообщение, в котором Эран Хаммер-Лахав из команды OAuth разъясняет эту проблему.

Ответ 2

Я предполагаю, что это реализовано таким образом, потому что клиент предоставляет недопустимые данные, то есть (имя пользователя, пароль, токен обновления и т.д.) клиент не пытается получить доступ к защищенному ресурсу, поэтому он получает HTTP 400, чтобы указать, что он должен исправить свои входы. Обычно вы должны получать 401 при попытке доступа к защищенному ресурсу с использованием недействительного или истекшего токена доступа.