Код состояния HTTP для отсутствия аутентификации

HTTP определяет статус 401 Unauthorized для отсутствия аутентификации, но этот статус применяется только к HTTP-аутентификация. Какой статус я должен возвращать в системе на основе сеансовых файлов cookie, когда происходит несанкционированный запрос?


person deamon    schedule 29.11.2010    source источник


Ответы (3)


Формально правильный ответ — 403 Forbidden. Это определяется как

Авторизация не поможет и запрос НЕ ДОЛЖЕН повторяться.

Запутанной частью может быть «Авторизация не поможет», но на самом деле они означают «HTTP-аутентификацию» (WWW-Authenticate)

person Martin v. Löwis    schedule 29.11.2010
comment
Это означает, что пользователь НИКОГДА не должен повторять запрос. Это не прилично. - person Erik Philips; 29.11.2010
comment
Технически я считаю, что вы правы. В случае практической реализации я считаю, что 200 с сообщением об ошибке на основе HTML или 302, перенаправляющим на другую страницу, где может произойти вход на основе сеанса, более распространены (и, возможно, возможно, более полезны). - person userx; 29.11.2010
comment
@Erik Philips - Это правильно, запроса быть не должно. Как только заголовки запроса будут изменены, чтобы иметь правильный файл cookie сеанса (следовательно, не тот же самый запрос), доступ будет предоставлен. - person userx; 29.11.2010
comment
Я не знаю, не вводит ли нас в заблуждение строгая ссылка на МЕТОД авторизации. IMO не имеет значения, передается ли авторизация через файлы cookie или поле заголовка, критическая информация кода состояния заключается в том, связана ли причина сбоя с несанкционированным запросом (срок действия токена истек/не указан — 401) или если пользователь не одобрен для доступа к этому ресурсу и нет возможности изменить его с помощью своей учетной записи (403). - person JakubKnejzlik; 23.07.2014

403 я считаю технически правильным (и, вероятно, наиболее эффективным, если вы реализуете собственный API/протокол).

401 не подходит, поскольку он относится к авторизации с заголовком WWW-Authenticate, которым не является файл cookie сеанса.

Если это общедоступный веб-сайт, на котором вы пытаетесь запретить доступ на основе файла cookie сеанса, часто лучше всего использовать 200 с соответствующим телом, указывающим, что требуется вход в систему, или временное перенаправление 302 на страницу входа.

person userx    schedule 29.11.2010
comment
Это можно было бы исправить, если бы я фактически определил схему аутентификации HTTP на основе файлов cookie. - person Julian Reschke; 29.11.2010
comment
@Julian Reschke - Ну, файлы cookie по определению не имеют большого отношения к аутентификации; прежде всего, они добавляют некоторое количество состояния к протоколу без состояния, HTTP. Сами файлы cookie ничего не аутентифицируют. Это просто информация, отправляемая на сервер, которую этот сервер ранее запросил у браузера для сохранения. Да, эту информацию можно использовать для определения того, аутентифицировались ли вы ранее как пользователь (обычно через HTTP POST/GET). Его также можно просто использовать, чтобы указать, видели ли вы конкретное объявление раньше, посещали ли этот сайт раньше и когда и т. д. - person userx; 29.11.2010

Вы можете использовать тестовое условие и передать

Код ошибки: 401.1 — Ошибка входа. Попытка входа не удалась, возможно, из-за недопустимого имени пользователя или пароля.

Который специально используется для неправильного пароля или несоответствия имени пользователя и пароля. Надеюсь, это поможет вам.

person Vasanth    schedule 29.11.2010
comment
Есть ли RFC, определяющий 401.1? - person deamon; 29.11.2010
comment
Коды состояния HTTP состоят из трех цифр. На проводе нет такой вещи, как NNN.N (кроме, может быть, в сообщении, которое не несет никакого смысла) - person Julian Reschke; 29.11.2010
comment
Я не смог найти RFC на 401.1. - person Vasanth; 29.11.2010
comment
Я не придумал 401.1, он используется Microsoft на сайтах, использующих технологию asp.net. Я не мог найти никакой другой ссылки, кроме как от Microsoft. - person Vasanth; 29.11.2010