Мы планируем разработать слой служб REST для предоставления служб, размещенных в устаревшей системе.Эти сервисы будут использоваться классическим веб-приложением и родными приложениями для мобильных телефонов.
Эта устаревшая система защищена таким образом, что требуется первоначальная аутентификация по имени пользователя и паролю (процесс, который может занять от 5 до 10 секунд).После первоначальной аутентификации возвращается ограниченный по времени токен.Затем этот токен должен быть включен во все дальнейшие запросы, иначе запросы будут отклонены.
Из-за требований безопасности устаревший токен безопасности не может быть возвращен за пределы уровня обслуживания REST.Это означает, что уровень сервиса REST должен хранить этот токен в какой-либо форме пользовательского сеанса, иначе дорогой процесс аутентификации по имени пользователя и паролю необходимо будет повторять для каждого вызова устаревшей системы.
Служба RESTслой будет реализован с использованием стека Java 6 + Spring 3 + Spring Security 3.На первый взгляд кажется, что эта установка будет работать нормально: службы REST на основе Spring будут защищены с использованием довольно стандартной конфигурации Spring Security, устаревший токен безопасности будет храниться в сеансе HTTP пользователя, и каждый вызов будет извлекать этот токен с помощьюсеанс пользователя и отправка его в унаследованную систему.
Но возникает вопрос: как клиенты REST будут отправлять необходимые данные, чтобы HTTP-сеанс пользователя был получен правильно?Обычно это делается прозрачно веб-браузером, использующим cookie-файл JSESSIONID, но ни один браузер не участвует в этом процессе.Конечно, клиенты REST могут добавить управление cookie-файлами в свой код, но это простая задача для всех клиентов Spring RestTemplate, iPhone, BlackBerry и Android?
Альтернативой может быть обход HTTP-сеанса на уровне службы REST.и использовать некоторую другую форму сеанса пользователя, возможно, с использованием базы данных, которая будет идентифицирована с использованием некоторого ключа, который будет отправлен клиентами REST через заголовок HTTP или простой запрос запроса.Тогда возникает вопрос: как настроить Spring Security для использования этого альтернативного механизма сеанса вместо стандартного Servlet HttpSession?
Конечно, я не первый, кто сталкивается с этой ситуацией.Что мне не хватает?
Спасибо!