Плохо ли обслуживать страницу с ошибкой 403 для политики уровня приложения? - PullRequest
2 голосов
/ 29 октября 2011

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

Считается допустимым перенаправлять на «Ошибка 403».страница в этой ситуации?Фактического ответа HTTP с кодом состояния 403 не было, не было ни одного запроса на уровне базы данных или сервера, который был бы неудачным - только моя бизнес-логика.Неужели я неправильно присвоил идею кодов состояния HTTP, если я обслуживаю страницу ошибки 403 с конкретным пояснительным сообщением?

Ответы [ 2 ]

2 голосов
/ 29 октября 2011

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

Если вы хотите отобразить страницу для клиента и будете использовать перенаправление, вы потеряете это значение «403».

Не лучше ли просто перенаправить их на страницу объяснения, не включая код "403". Или, что еще лучше, перенаправьте их в более полезное место, например на страницу регистрации, если это то, что им нужно сделать, чтобы создать сообщение, или вернитесь на исходную страницу с плавающим сообщением.

Мы хотим помочь пользователю приблизиться к своим целям, а не путать их с техническими кодами ошибок.

0 голосов
/ 29 октября 2011

Эта тема часто обсуждается очень часто и сводится к следующим вариантам:

  • a 5xx?Конечно, нет.Это не ошибка сервера.
  • a 400?Не совсем, это не был искаженный запрос.
  • a 401?Скорее всего нет, 401, как правило, для авторизации в целом, а не для разрешений на уровне приложений.Если ваш пользователь уже выполнил вход, но у него неправильная роль, и вы хотите сообщить ему об этом, используйте что-нибудь еще.
  • a 404?Возможно, поскольку сервер не может найти ресурс для этого конкретного пользователя, но если вы хотите сказать пользователю «хорошо, такой ресурс доступен, но у вас не может быть его, потому что у вас нет разрешений», тогдапойти с чем-то еще.
  • a 403?На самом деле, это имеет большой смысл.Вот определение из RFC

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

В своем вопросе вы упоминаете о своем намерении перенаправить пользователя.Если вы делаете RESTFUL веб-сервис , просто верните 403. Если вы работаете с целым веб-приложением, вы можете управлять 403 и перенаправлять ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...