Следует ли здесь использовать 401 Несанкционированный или 403 Запрещенный? - PullRequest
4 голосов
/ 08 апреля 2011

Я прочитал аналогичный вопрос , но он меня не совсем устраивает.

У меня есть два варианта использования.

  1. Анонимный (не прошедший проверку подлинности) пользователь пытается получить доступ к защищенному (только авторизованному) ресурсу
  2. Аутентифицированный пользователь пытается получить доступ к ресурсу, к которому у него нет прав доступа (т.е. он не принадлежит к группе)

Для этих двух случаев какой код ошибки должен быть возвращен? Я предполагаю 401 для первого и 403 для второго. Но для 401 заголовок WWW-Authenticate должен быть включен в ответ. Я не хочу использовать базовую HTTP-аутентификацию, вместо этого выбираю более традиционный подход на основе форм. (то есть пользователь отправляет форму из Login.aspx или чего-либо еще).

Так какой же мне использовать?

Ответы [ 2 ]

2 голосов
/ 08 апреля 2011

Для первого случая вы должны использовать 401 Unauthorized :

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

Для второго случая вы должны использовать 403 Запрещено :

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

РЕДАКТИРОВАТЬ: Кажется, я не RTFQ - мой плохой.

Если вы не хотите использовать HTTP-аутентификацию, то для случая # 1 вы можете просто вернуть 200 OK :

... или 307 Временное перенаправление , указывающее на экран входа в систему - после чего клиент 307 вернется к исходному URL-адресу после проверки подлинности.

Для случая № 2 403 по-прежнему звучит как вполне разумный ответ - хотя, если подумать, он может быть предназначен для ресурсов, которые никому не должны обслуживаться - поскольку 404 предлагается в качестве действительного альтернативного ответа.

... Так что, возможно, дело № 2 также получит ответ 307 или 200.

1 голос
/ 08 апреля 2011

401 для первых 403 для второго - это то, что я думаю.

...