Отдельный статус HTTP для неавторизованных и не авторизированных в RESTful API
Поэтому отправьте несколько разных заголовков статуса в моем API, включая 404
, 409
, 201
, 302
и тому подобное. Теперь у меня проблемы с 401 Unauthorized
. В настоящее время я отправляю его, если пользователь не вошел в систему (весь API управляется правами) или если пользователь не удовлетворяет конкретным требованиям к доступу к определенному ресурсу, который был получен/изменен.
Теперь я также управляю внешним клиентом (jQuery/HTML-приложение), и я хотел бы различать два случая для 401
. Есть ли определенный статус, который я должен использовать для того, чтобы он не вошел в систему? Лучший способ справиться с этим, чтобы отправить содержимое тела вместе с заголовком?
Ответы
Ответ 1
Вы должны использовать 403
, чтобы указать, что пользователь не имеет права доступа к ресурсу. Использование 401
означает, что пользователю необходимо предоставить учетные данные так же, как вы его используете. См. Описания 401
и 403
здесь.
Ответ 2
Как говорят laz, вы должны использовать 403
, когда вы аутентифицировали пользователя, но у пользователя нет разрешения делать то, о чем она просит. например вы можете разрешить GET'у ресурса, но не DELETE или PUT.
- 401 будет неправильным, поскольку в основном говорит, что "я не распознаю эти учетные данные"
- 403 является правильным, поскольку в нем говорится, что "вам не разрешено делать это"
В любом случае тело ответа должно всегда содержать больше информации даже если это ответ об ошибке. Это позволяет клиенту выйти, надеюсь, двигаться вперед (используя встроенные ссылки) или путем предоставления достаточной информации о том, как действовать (например, "Мои записи показывают, что у вас нет разрешения на удаление XXX", обратитесь к своему системному администратору и попросите FOOBAR ").