Restful Java - Предоставить доступ к ресурсам - PullRequest
2 голосов
/ 10 мая 2011

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

С другой стороны, у меня есть клиент, который может получить доступ к этим ресурсам.Для доступа к некоторым из этих ресурсов клиент должен быть зарегистрирован (существует в базе данных).Я использую GAE в качестве сервера приложений и Джерси для создания Restful WS, поэтому мой вопрос заключается в том, как лучше всего получить доступ к этим ресурсам?

Я думал, что при отправке имени пользователя и пароля в запросе WS (как POST)а затем проверьте, существует ли пара в БД и отвечает на запрос.

Считаете ли вы, что этот вид аутентификации безопасен (я не думаю, что могу использовать https в GAE)?

Спасибозаранее за ответы

Данило

Ответы [ 2 ]

2 голосов
/ 11 мая 2011

Вы должны использовать OAuth 1.0 или 2.0

1 голос
/ 10 мая 2011

Возможно, вы захотите использовать некоторую форму защиты транспортного уровня, такую ​​как SSL, для защиты вашей службы.

Кроме того, REST пытается использовать функции HTTP, чтобы вы могли поместить заголовок авторизации в запрос HTTP.

Редактировать: простой пример

Безопасность транспортного уровня
Перейти к одной из многих компаний, продающих сертификаты SSL, например Verisign.Купить сертификат.Установите его на свой веб-сервер.На вашем веб-сервере будет документация по его установке.

Использование HTTP-авторизации
Получите у клиента вашего веб-сервиса использование BASIC-авторизации (они передаются в виде открытого текста, поэтому вы 'мы должны использовать SSL для того, чтобы это было эффективно).Это включает в себя ввод имени пользователя и пароля, закодированных в BASE64, в Авторизационный заголовок .Напишите код безопасности Filter и настройте веб-приложение так, чтобы все запросы к службе RESTful передавались через фильтр.Ваш фильтр безопасности должен извлечь имя пользователя и пароль из заголовка авторизации запроса и проверить их.Если учетные данные недействительны, вы отклоняете запрос с кодом состояния 403.Если учетные данные в порядке, просто распространите цепочку фильтров.

public MySecurityFilter implements Filter {

  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {

    //Get the Authorizatiuon header
    String auth = ((HttpServletRequest)request).getHeader("Authorization");

    //Extract the username and password

    if (checkCredentialsOnMyDatabase(credentials[0], credentials[1])) {
      chain.doFilter(request, response);
    } else {
      //Reject the request with status code 403
    }
  }
}

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

...