Подтвердить что ты не робот

HTTP 401 Неавторизованный или 403 Запрещен для пользователя с отключенным?

Служба проверки подлинности позволяет отключить учетные записи пользователей (что-то вроде soft-delete).

Если сервер затем получает запрос аутентификации для отключенного пользователя, который в противном случае был бы действительным, должен ли сервер возвращать 401 или 403? С кодом состояния я бы вернул сообщение о том, что учетная запись была отключена.

Для быстрой справки соответствующие цитаты из HTTP/1.1 spec (выделение мое):

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

Запрос требует аутентификации пользователя. Ответ ДОЛЖЕН включать   Поле заголовка WWW-Authenticate (раздел 14.47), содержащее вызов   применительно к запрашиваемому ресурсу. Клиент МОЖЕТ повторить   запросите с подходящим полем заголовка полномочий (раздел 14.8). Если   запрос уже включил учетные данные авторизации, затем 401   ответ указывает, что разрешение было отклонено для тех   Полномочия. Если ответ 401 содержит тот же вызов, что и   предыдущий ответ, и пользовательский агент уже предпринял попытку   аутентификацию хотя бы один раз, то пользователю ДОЛЖНО быть представлено   объект, который был указан в ответе, поскольку этот объект может   включить соответствующую диагностическую информацию. Проверка подлинности HTTP-доступа   объясняется в разделе "HTTP-аутентификация: базовый и дайджест-доступ"   Аутентификация "[43].

403 Запрещено

Сервер понял запрос, но отказывается его выполнять.    Авторизация не поможет, а запрос НЕ ДОЛЖЕН повторяться.   Если метод запроса не был HEAD, и сервер хочет сделать   публично, почему запрос не был выполнен, он СЛЕДУЕТ описать   причина отказа в организации. Если сервер не желает   сделать эту информацию доступной для клиента, код состояния 404   (Не найдено).

4b9b3361

Ответ 1

На основе электронное письмо, написанное Roy T. Fielding, по-видимому, ошибка в текущей спецификации HTTP.

Способ, которым спецификация предназначена для чтения, выглядит следующим образом (используя цитаты из вышеприведенного письма):

401 "Неаутентифицированный" :

вы не можете сделать это, потому что вы не аутентифицировали

403 "Несанкционированный" :

Пользовательский агент

отправил действительные учетные данные, но не имеет доступа

Таким образом, в случае с отключенным пользователем 403 является правильным ответом (и 404 также является опцией).

Ответ 2

У меня есть два разных ответа на вопрос, что вернуть в этом случае.

Семантический выбор - 401 Несанкционированный. В этом случае ваш клиент предоставил учетные данные, и запрос был отклонен на основе определенных учетных данных. Если клиент должен повторить попытку с другим набором учетных данных или если учетная запись должна быть повторно включена в будущем, тот же запрос может быть успешным.

Выбор безопасности - 404 Не найдено. Многие службы просто возвратят 404 для любого отказа, чтобы избежать утечки информации. Гитуб сразу приходит в голову.

Из Общая информация API, в документах разработчика github:

Неавторизованные запросы возвратят 404 для предотвращения любых личная утечка информации.

Для чего-то, что я развертывал как общедоступную службу, я бы, вероятно, воспользовался 404, чтобы не дать подсказкам злоумышленника о своих попытках проверки подлинности. Если бы это было для внутреннего потребления или тестирования, я бы, вероятно, вернул 401.

Ответ 3

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

возвращающий 401, говорит вызывающему, что учетная запись недействительна, что является правильным, но если ваш api затем будет вызван снова, чтобы зарегистрировать пользователя с теми же учетными данными, которые вызовут также сбой. что может быть не очень полезно для вызывающего абонента.

Таким образом, это действительно зависит от того, как будет использоваться ваш api и кто/что представляет собой целевая аудитория.