2

Как бы вы объединили OpenID с веб-службой RESTful?Использование OpenID (RPX) (и, возможно, OAuth) для веб-службы RESTful

Личный проект, над которым я работаю, использует RPX SaaS для выполнения OpenID. Ключевым результатом этого является URL-адрес, описывающий зарегистрированного пользователя. Само приложение очень сильно Javascript, и я планирую использовать REST api для связи с бэкэнд для сохранения базы данных и пространственной обработки.

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

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

Варианты:

  1. Возвращает URL OpenID для приложения Javascript, использовать это, чтобы получить список ресурсов для пользователя, а затем восстановить/сохранить/и т.д. эти ресурсы по идентификатору.

  2. Создать таблицу сеансов, которая связывает URL OpenID со случайным токеном сеанса. Верните токен в приложение Javascript, которое затем должно вернуть токен с каждым последующим запросом.

  3. Используйте сеанс из опции 2 в качестве потребительского токена и т. Д. Для OAuth. Первоначально сеанс будет отправлен в приложение с использованием шифрования PKI.

  4. Опираясь на сеанс HTTP J2EE.

Из этих вариантов я склоняюсь к опции 2. Угон сессии будет сложно, как злоумышленник должен угадать идентификатор сеанса, и я не считаю, что приложение требует защиты от перехвата. Вариант 3 по существу совпадает с вариантом 2, но идентификатор сеанса недоступен для обнюхивания. Вариант 4 помещает URL OpenID в память сервера и вызывает все проблемы с масштабируемостью, которые REST предназначен для предотвращения.

Я благодарен за любое обсуждение этого вопроса.

ответ

0

Итак, 2 года через 3 месяца я могу ответить на свой вопрос. Я реализовал это для своего личного проекта, и я отдельно реализовал его для своего работодателя.

Подключение к весне Безопасность - лучший способ пойти. Вы можете использовать поток, прошедший проверку подлинности, но вы можете найти, что CasAuthenticationFilterCasAuthenticationEntryPoint) работают лучше, поскольку они имеют большую часть потока, в котором вы нуждаетесь.