Отличный статус HTTP для не авторизованного или не авторизованного в RESTful API - PullRequest
15 голосов
/ 20 августа 2010

Итак, отправьте несколько разных заголовков состояния в моем API, включая 404, 409, 201, 302 и тому подобное. Сейчас у меня проблемы с 401 Unauthorized. В настоящее время я отправляю его, если пользователь не вошел в систему (весь API управляется правами) или если пользователь не удовлетворяет определенным требованиям доступа для конкретного ресурса, который извлекается / изменяется.

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

Ответы [ 2 ]

23 голосов
/ 20 августа 2010

Вы должны использовать 403, чтобы указать, что пользователь не авторизован для доступа к ресурсу. Использование 401 предназначено для указания того, что пользователь должен предоставить учетные данные так же, как вы используете их в настоящее время. См. Описания 401 и 403 здесь .

5 голосов
/ 20 августа 2010

Как говорят laz, вы должны использовать 403, когда вы аутентифицировали пользователя, но у пользователя нет разрешения делать то, что он просит.Например, вы можете разрешить GET'ing ресурс, но не DELETE или PUT.

  • 401 будет неправильным, поскольку в основном говорится, что «я не распознаю эти учетные данные»
  • 403 является правильным, поскольку в нем говорится, что «вам запрещено это делать»

В любом случае, тело ответа должно всегда содержать больше информации, , даже если это сообщение об ошибке .Это позволяет клиенту выйти из ситуации, надеясь двигаться вперед (используя встроенные ссылки) или предоставив достаточно информации о том, как действовать (например, «Мои записи указывают, что у вас нет разрешения на удаление XXX», обратитесь к системному администратору и попроситеРазрешение FOOBAR ").

...