Вызов веб-службы REST, защищенной с помощью Spring Security из Android - PullRequest
12 голосов
/ 12 января 2011

Я размещаю веб-сервис REST в приложении Grails, используя Spring Security, то есть:

@Secured(['IS_AUTHENTICATED_REMEMBERED'])
def save = {
    println "Save Ride REST WebMethod called"
}

Я звоню из приложения Android.(Вызов незащищенной службы работает просто отлично.)

Чтобы вызвать службу, я вручную формирую запрос (HttpUriRequest) и выполняю его с HttpClient.

I.мне интересно, каковы лучшие практики и как их реализовать ... В частности, я должен:

  1. Выполнить вход в систему один раз, чтобы получить JSESSION_ID, затем добавить заголовок, содержащий его в HttpUriRequestдля каждого последующего запроса?
  2. Или (не уверен, как бы я это сделал) включать логин и пароль непосредственно в каждый запрос, исключая сеанс cookie / на стороне сервера

IЯ думаю, что я могу заставить работать вариант 1, но я не уверен, если Spring Security разрешает (2), если это путь ... Спасибо!

- также, нет никакой библиотеки, которую яотсутствует, что бы сделать все это для меня там?:)

Ответы [ 2 ]

10 голосов
/ 12 января 2011

Spring security поддерживает как базовую аутентификацию, так и аутентификацию на основе форм (встраивание имени пользователя / пароля в URL).

Служба REST обычно аутентифицируется при каждом запросе, а необычно сеансом.Аутентификация безопасности по умолчанию Spring (при условии, что вы используете 3.x) должна искать базовые параметры аутентификации или параметры формы (j_username и j_password) (в форме http://you.com/rest_service?j_username=xyz&j_password=abc).

Ручная привязка j_username / j_password кURL, добавление их в качестве параметров публикации (я полагаю) или установка имени пользователя и пароля для базовой аутентификации должны все работать для аутентификации службы REST на перехватчиках Spring Security по умолчанию, прямо из коробки.

Я признаючто я не пробовал это на сервисах REST, хотя я точно помню, что читал именно это в документах, как недавно сделал то же самое для базовых входов в систему по весенней безопасности. Отказ от ответственности.

9 голосов
/ 25 июля 2011

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

отправка имени пользователя и пароля по сети за пределы защищенного канала (https / ssl)это ужасная идеялюбой пользователь в сети может прослушать ваш пакет запросов и увидеть открытый текстовый пароль.

с другой стороны, если вы используете метод токена, поскольку строка токена генерируется случайным образом, даже токен скомпрометирован, наихудшийВ случае, если кто-то может использовать токен для доступа к вашему REST API.

другое решение идет через туннель ssl (HTTPS).Я действительно сделал сравнение и показывает результат: 80 запросов / мин (https) против 300 запросов / мин (http)

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