REST Безгражданство и пользовательский сеанс в веб-сервисах - PullRequest
4 голосов
/ 08 января 2011

Я хочу разработать REST API.Рекомендации REST указывают, что состояние не должно храниться на стороне сервера.Но методы REST, которые я хочу реализовать, подразумевают управление пользовательскими подключениями.Чтобы уважать отсутствие состояния, нужно ли вводить учетные данные пользователя в каждом запросе метода REST?Я нахожу это совершенно неэффективным ... Разве нет другого более эффективного способа ??

Ответы [ 2 ]

7 голосов
/ 08 января 2011

Безгражданство является одним из основных ограничений архитектуры REST, о чем можно прочитать в оригинальной публикации :

5.1.3 Без состояния

Далее мы добавим ограничение к взаимодействию клиент-сервер: связь должна быть без состояния по своей природе, как в стиле клиент-без-состояния сервера (CSS) в разделе 3.4.3 (рисунок 5-3), так чтокаждый запрос от клиента к серверу должен содержать всю информацию, необходимую для понимания запроса, и не может использовать какой-либо сохраненный контекст на сервере. Таким образом, состояние сеанса полностью сохраняется на клиенте.

Таким образом, для упомянутых вами учетных данных вы должны указывать их в каждом вызове отдельно (то есть Basic Auth + SSL).Конечно, это «реальный мир», и приложения начинают различаться.Вы также можете использовать OAuth, фиксированные токены и т. Д., Но помните, что тогда вы ослабляете «RESTfulness» вашего API.

3 голосов
/ 09 января 2011

Аутентификация при каждом запросе не обязательно требует передачи имени пользователя и пароля при каждом запросе.Некоторые системы принимают имя пользователя и пароль, проверяют его, а затем создают какой-то токен безопасности, который можно вместо этого передавать при каждом запросе.

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

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