#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. Спасибо за ваш ответ, не могли бы вы привести мне пример? Спасибо за ваше время