401 Unauthorized vs 403 Forbidden: Какой код статуса подходит для случая, когда пользователь не вошел в систему? - PullRequest
0 голосов
/ 03 мая 2018

После многих Googling и Stackoverflowing мне все еще неясно, потому что многие статьи и вопросы / ответы были слишком общими (включая 403 Запрещено против 401 Несанкционированных HTTP-ответов , которые не были специально для меня использованы -случае).

Вопрос: Какой правильный код статуса HTTP, когда пользователь не вошел в систему и запрашивает просмотр некоторых страниц, которые должны отображаться только зарегистрированным пользователям?

Ответы [ 3 ]

0 голосов
/ 03 мая 2018

Это зависит от механизма, который вы используете для входа в систему.

В спецификации для 403 Forbidden написано:

Код состояния 403 (Запрещено) указывает, что сервер понял запрос, но отказывается его авторизовать. Сервер, который хочет обнародовать, почему запрос был запрещен опишите эту причину в полезной нагрузке ответа (если есть).

Если в запросе были указаны учетные данные для проверки подлинности, сервер считает их недостаточными для предоставления доступа. Клиент НЕ ДОЛЖЕН автоматически повторять запрос с тем же полномочия. Клиент МОЖЕТ повторить запрос с новым или другим учетные данные. Однако запрос может быть запрещен по причинам не связанные с полномочиями.

Хотя 401 Unauthorized не определено в основной спецификации кодов состояния HTTP, но находится в спецификации проверки подлинности HTTP и говорит:

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


Так что, если вы используете заголовки WWW-Authenticate и Authorization в качестве механизма аутентификации, используйте 401. Если вы используете любой другой метод, используйте 403.

0 голосов
/ 09 февраля 2019

IMO Это будет зависеть от типа ресурса, который вы пытаетесь запросить. Звучит более логично. Запрещенный относится больше к файлам или папкам веб-сайта, либо к ресурсам в целом, в то время как Unauthorized более логично использовать, если требуется какой-либо тип выполнения, сценарии страницы и т. Д.

0 голосов
/ 03 мая 2018

Точный удовлетворительный разовый для всех ответ, который я нашел:

Краткий ответ:

401 Несанкционированный


Описание:

Пока мы знаем, что это аутентификация (пользователь вошел в систему или нет?), А затем мы перейдем к авторизации (имеет ли он необходимые привилегии или нет?), но вот ключ, который делает нас ошибочными:

Но не является ли «401 несанкционированным» авторизацией, а не аутентификацией?

Назад, когда была написана спецификация HTTP (RFC 2616), эти два слова не могут были так широко поняты, чтобы быть отличными. Это ясно из описание и другие вспомогательные тексты, о которых 401 аутентификации.

С Коды состояния HTTP 401 не авторизованы и 403 запрещены для аутентификации и авторизации (и OAuth) .

Так что, может быть, если мы хотим переписать стандарты! сосредоточив внимание на каждом слове, мы можем обратиться к следующей таблице:

Status Code | Old foggy naming | New clear naming | Use case
+++++++++++ | ++++++++++++++++ | ++++++++++++++++ | ++++++++++++++++++++++++++++++++++
401         | Unauthorized     | Unauthenticated  | User has not logged-in
403         | Forbidden        | Unauthorized     | User doesn't have enough privilege
...