2012-06-17 4 views
6

Я создаю спокойный веб-сервис на основе Spring. Я использую Spring Security. Доступ к нему будут доступны только для настольных приложений. В основном это веб-сервис от машины к машине.Аутентификация в веб-службе RESTful

  • Я хочу, чтобы пользовательская служба выполняла аутентификацию. Затем выполните другие, более чувствительные операции, основанные на результате проверки подлинности.

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

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

Что вы предлагаете, связанные с этим? Пойти без гражданства или состояния? Существуют ли серьезные недостатки для подхода, основанного на учете состояния здоровья?

До этого момента я прочитал несколько глав от Java Web Services Up and Running , а также несколько вопросов от SO, таких как this.

ответ

3

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

Что касается аутентификации с использованием имени пользователя и пароля по каждому запросу, он безопасен, если вы можете использовать ... защищенный слой (https); Кроме того, пара отправляется в ясном тексте и обнаруживается.

Другим вариантом является использование чего-то типа AWS для этого (ссылки на Amazon here и here, например). Здесь для других объяснений: buzzmedia и samritchie

Возможно, OAuth - это вариант, но у меня нет опыта с ним.

+0

Так что это больше похоже на шаблон дизайна для безопасности в веб-службах REST. Мой вопрос: разве это не медленнее, менее эффективно? На веб-сервисе, основанном на SOAP, мне не известны рекомендации, чтобы избежать сеансов. Есть ли очевидные преимущества для полного отсутствия гражданства? Спасибо! –

+0

Что касается производительности: я бы сказал, что несколько инструкций, необходимых для вычисления хэша, или несколько байтов, переданных для информации об аутентификации, на сегодняшний день являются несущественными по сравнению с общей передачей и временем обработки запроса. – jmclem

+0

Да, время обработки запроса может быть проблемой. Я имею в виду, что каждый раз, когда учетные данные передаются, для проверки подлинности пользователя необходимо выполнить поиск базы данных. –

0

Для начала REST службы (Client - Server) Я настоятельно рекомендую вам использовать Restlet

Аутентификация в этой службы REST может быть определена с помощью ClientResource. Пример:

private static ClientResource getClientResource(String uri) { 
ClientResource clientResource = new ClientResource(uri); 
clientResource.setChallengeResponse(ChallengeScheme.HTTP_BASIC, 
     "username", "password" 
     ); 
return clientResource; 
} 
+0

Хотя я ценю предложение, я хотел бы знать, является ли отправка имени пользователя и пароля для каждого запроса жизнеспособным вариантом, когда речь заходит о защите веб-службы REST. Благодаря! –

+0

Вы можете пройти аутентификацию через ресурс входа, а затем просто проверить cookie по каждому запросу. Так мы делаем это как минимум – Gonzalo

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