Какой правильный ответ на неавторизованный HTTP-запрос? - PullRequest
1 голос
/ 24 июня 2009

Я пишу веб-приложение. Я не уверен в правильности ответа на несанкционированный запрос. Пользователю удобно, когда сервер отвечает 302 и перенаправляет его на страницу входа. Однако где-то глубоко внутри я чувствую, что 401 более правильный. Я также немного боюсь, что 302 не может быть неправильно истолкован поисковыми системами.

Итак, как вы реагируете на несанкционированные запросы?


Редактировать

Я использую ASP.NET MVC. Это не важно с теоретической точки зрения. Однако аутентификация формы ASP.NET использует подход 302.

Мне также нравится поведение, когда пользователь перенаправляется после успешного входа на страницу, которую он запрашивал. Я не уверен, что это можно легко реализовать с помощью подхода 401.

Ответы [ 6 ]

4 голосов
/ 24 июня 2009

Я думаю, что правильный ответ полностью зависит от контекста запроса. В веб-приложении, предназначенном для использования человеком (не машиной), я предпочитаю либо перенаправить на вход в систему, если пользователь не аутентифицирован, и отобразить страницу с ошибкой, если пользователь аутентифицирован, но не авторизован. Обычно я не возвращаю неавторизованный ответ, поскольку он содержит слишком мало информации для обычного пользователя, чтобы помочь ему использовать приложение.

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

Что касается поисковых систем, правильно составленный файл robots.txt, вероятно, более полезен для ограничения его публичными страницами.

2 голосов
/ 24 июня 2009

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

Цитировать спецификацию.

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

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

1 голос
/ 24 июня 2009

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

Вы не можете сделать это с ошибкой 401, если только вы не планируете включить форму входа в систему на странице ошибок. С точки зрения удобства использования, первый случай (302) является более разумным.

Кроме того, вы можете написать код, чтобы перенаправить людей на вашу страницу входа и поисковые системы на 401.

1 голос
/ 24 июня 2009

Отправьте ответ 401 и добавьте форму входа на страницу, которую вы возвращаете вместе с ним. (т.е. не просто включите ссылку на страницу входа в систему, включите всю форму прямо здесь.)

1 голос
/ 24 июня 2009

Я должен согласиться с вами, что результат 401 на самом деле является правильным ответом.

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

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

0 голосов
/ 24 июня 2009

Как поисковые системы будут индексировать защищенные страницы? ИМХО не должны заходить так далеко неавторизованные пользователи, такие как боты.

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