2009-07-15 3 views
1

У меня есть веб-приложение, которое использует шаблоны URL RESTful. В настоящее время, если пользователи пытаются получить доступ к странице, где они должны быть аутентифицированы, она просто ничего не возвращает. Хорошая практика - вернуть код статуса HTTP в этом случае? Я бы использовал 403 или другой?Код статуса HTTP для контента, для которого требуется аутентификация?

+0

REST не имеет отношения к шаблонам URI. «RESTful url patterns» - полная бессмыслица. Я подозреваю, что ваш API - это просто RPC. – aehlke

ответ

3

Вы должны отправить ответ с кодом состояния HTTP.

Я бы не послать 403 Forbidden назад, хотя, как спецификация определяет для этого код состояния:

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

Return Несанкционированное код статуса 401 вместо. Смотрите это для получения дополнительной информации о кодах состояния:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

Как мне это сделать с Джерси отправить ответ со статусом и затем включить объект String, который содержит читаемое сообщение человека, например

Response response = Response.status(Status.PRECONDITION_FAILED).entity(
        new String("Incorrect " + id + " [" + id + "]")).build(); 

Это будет отображаться клиенту. Я бросаю исключение Джерси WebApplicationException, которое завершает этот ответ.

+0

Спасибо, Jon, это было очень полезно. –

1

Если у них нет прав доступа 401, чтобы дать им возможность ответить на вызов аутентификации или 403, если вы этого не хотите.

Restlet 1.1 и далее возвращают 403, а более ранние версии возвращают 401. 403, по-видимому, считаются более правильными, если не обязательно более полезными.

0

зависит от цели. Вы действительно должны что-то вернуть, конечно, чтобы иметь приличный клиентский опыт. Если вы хотите дать им возможность пройти аутентификацию в этот момент, вы можете вернуть 401, и клиент будет знать, чтобы передавать учетные данные, используя стандартную проверку подлинности. Если, однако, вы предпочтете, чтобы они аутентифицировались через какой-то другой механизм (некоторый URL-адрес для входа, а затем установили cookie или somesuch), тогда возвращение 403 - это, вероятно, путь.

0

lol ... в реализации REST API. Я только что построил. Я вернул код состояния 401 с телом ответа, который читал «до свидания». Было первое, о чем жаловался парень, взаимодействующий с API. Я все еще думаю, что «до свидания» все это сказал;)

Смежные вопросы