Что означает, что авторизация не поможет в спецификации HTTP для ошибки 403?

В спецификации HTTP 1.1 говорится:

10.4.4 403 Запрещено

Сервер понял запрос, но отказывается его выполнить.
Авторизация не поможет, и запрос НЕ ДОЛЖЕН повторяться. [...]

Означает ли это только базовую авторизацию, как в WWW-Authenticate: Basic? Следует ли когда-либо выдавать 403 для ресурсов, где какой-либо другой пользователь потенциально может получить доступ к запрещенному ресурсу с помощью средств, отличных от базовой HTTP-аутентификации (например, через его файл cookie сеанса, OpenID и т. Д.)?

Я спрашиваю об этом, поскольку HTTP 401 говорит, что ...

ответ ДОЛЖЕН включать поле WWW-Authenticate header

... и я не уверен, стоит ли мне добавлять заголовок вроде WWW-Authenticate: Custom.

Многие люди, кажется, используют 403, даже в тех случаях, когда простой файл cookie мог сделать ресурс доступным. Они все не правы?


person Camilo Martin    schedule 20.12.2013    source источник


Ответы (1)


Я считаю, что вы правы, что 403 следует использовать, когда запрос будет отклонен, независимо от авторизации. Примером использования может быть предотвращение просмотра каталогов, как описано здесь:

http://www.checkupdown.com/status/E403.html

Конечно, возможно, что люди используют его неправильно, вместо этого следует использовать 401.

Различия между 401 и 403 также обсуждаются в этом другом вопросе SO, где консенсус состоит в том, что 401 предназначен для ошибки аутентификации, а 403 - ошибки авторизации.

Проблема аутентификации по сравнению с авторизацией может немного сбивать с толку, особенно когда спецификация говорит:

10.4.2 401 Неавторизованный

Запрос требует аутентификации пользователя.

Я думаю, что ключевое различие заключается в следующем:

  • 401 означает, что вы не авторизованы, потому что у вас нет правильной аутентификации.
  • 403 означает, что вы не авторизованы независимо от аутентификации.
person Ergwun    schedule 20.12.2013
comment
Насколько я понимаю, 403 также будет подходящим, если вам отказано в доступе к вашему IP-адресу, или вашему пользовательскому агенту, или какой-либо другой вещи, которую вы не ожидаете изменить. 401 означает, что попробуйте еще раз с правильными учетными данными; 403 означает уходи, ты мне не нравишься. - person hobbs; 20.12.2013
comment
Требование о WWW-Authenticate не следует воспринимать слишком буквально, это хорошие намерения со стороны авторов спецификации, но мир придумал множество способов аутентификации через HTTP, которые на самом деле не являются аутентификацией HTTP. - person hobbs; 20.12.2013
comment
@hobbs - это хороший аргумент в отношении других сценариев, где уместно 403. Я удалил из своего ответа предложение для любого пользователя, чтобы сосредоточиться на ключевом различии аутентификации и авторизации, и добавил еще несколько объяснений 401 и 403. - person Ergwun; 20.12.2013
comment
@hobbs Ну, это спецификация прошлого тысячелетия, но все же я не уверен, вызовет ли отсутствие WWW-Authenticate диалоговые окна входа в систему HTTP из любых браузеров ... Этот вопрос наводит на мысль, что Firefox представит такое диалоговое окно входа в систему, но я его не получаю. Кроме того, не будут ли ваш IP-адрес и пользовательский агент в общих чертах формой учетных данных? - person Camilo Martin; 20.12.2013
comment
Я согласен с вашим последним замечанием о различии между ними, но поскольку в спецификации говорится, что авторизация не поможет, авторизованный пользовательский агент (другой IP-адрес и т. Д.) Не должен иметь значения. Тем не менее, это делает потенциальное использование 403 очень ограниченным. - person Camilo Martin; 20.12.2013