Restful Java — Предоставляет доступ к ресурсам

#java #google-app-engine #authentication #rest #restful-authentication

#java #google-app-engine #аутентификация #rest #restful-аутентификация

Вопрос:

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

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

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

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

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

Данило

Комментарии:

1. Как правило, отправка пароля, который может быть использован более одного раза по незашифрованному соединению, не считается безопасной.

2. GAE поддерживает HTTPS — googleappengine. blogspot.com/2008/10 /…

Ответ №1:

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

Ответ №2:

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

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

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

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

Использование авторизации HTTP
Заставьте клиента вашего веб-сервиса использовать БАЗОВУЮ авторизацию (они передаются в виде открытого текста, поэтому вы должны использовать 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
    }
  }
}
  

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

Комментарии:

1. Спасибо за ваш ответ, не могли бы вы привести мне пример? Спасибо за ваше время