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

Авторизация в RESTful HTTP API, 401 WWW-аутентификация

Я создаю службу RESTful для предоставления данных в веб-приложении. У меня есть два связанных с этим вопроса.

1. Как бороться с несанкционированными запросами?

Я собираюсь ответить на запросы со следующими кодами:

  • Открыт ли ресурс и найден ли он? 200 OK
  • Вам нужно пройти аутентификацию для доступа к ресурсам? 401 Несанкционированный
  • У вас нет доступа к категории ресурсов? 403 Запрещено
  • У вас есть доступ к категории ресурсов, но не к этому конкретному ресурсу? 404 Не найдено, чтобы люди не могли узнать о существовании ресурса, к которому у них нет доступа.
  • Разве ресурс не существует? 404 Не найдено

Это рекомендуемый способ поведения службы RESTful?

2. В чем заголовок WWW-Authenticate должен содержать 401 ответа?

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

Я нашел несколько вопросов о SO и темы форума об этом заголовке, и все они, похоже, относятся к OAuth, предлагают не использовать коды состояния 401 или сказать, что вы можете просто что-то сделать.

Какое значение должно содержать этот заголовок?

4b9b3361

Ответ 1

Чтобы ответить на ваши вопросы:

Как бороться с несанкционированными запросами?

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

Какой заголовок WWW-Authenticate должен содержать 401 ответа?

В общем случае заголовок WWW-Authenticate сообщает клиенту, какой тип аутентификации будет приниматься сервером. Если клиент делает несанкционированный запрос, что означает, что он отправляет запрос с отсутствующим или недопустимым заголовком Authorization, сервер будет использовать WWW-Authenticate, чтобы сообщить клиенту, какую схему аутентификации он примет (т.е. Basic, Digest или OAuth) и для какой области.

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

Пример: WWW-Authenticate: Basic realm="My App"

Здесь сервер сообщает клиенту, что он использует схему аутентификации Basic. Область - не что иное, как некоторая строка, которая идентифицирует защищенное пространство на сервере.

Ответ 2

Основываясь на моих исследованиях (googling), я решил отправить: Newauth realm = "использовать токен входа".

На веб-сайте http://greenbytes.de/tech/tc/httpauth/#unknown есть тестовые примеры для разных методов auth, и я не нашел ничего, что описывает "get auth token" и, следовательно, Я думаю, что это "Newauth".

Также важно для меня: это не создает приглашение для входа на стороне клиента.