2012-03-29 2 views
1

Я создаю веб-приложение, которое использует систему управления контентом Drupal 7. Веб-страницы сильно используют JQuery и AJAX.Как защитить службу REST Java с помощью Drupal?

Звонки AJAX находят услуги REST, которые фактически реализованы с использованием JAVA. Apache запускает Drupal 7 и настроен на передачу любых вызовов на URL REST на сервер Java EE (Jboss AS7). Все по SSL.

Мне нужно авторизовать и аутентифицировать вызовы сервисам REST и получить доступ к имени пользователя или идентификатору человека, который в настоящий момент вошел в систему Drupal из приложения Java. Вопрос в том, как ... как ...

Поскольку вызовы AJAX выполняются на одном сервере Apache (а не на отдельном сервере и т. Д.), Все происходит в рамках одной и той же http-сессии, поэтому я надеюсь, что это будет будет довольно легко.

Вещей я думал-о:

  • Настройки ява безопасность перехватчик, который вызывает пользовательский (локально доступ только) Друпала сервис, который как-то читает идентификатор сеанса, и возвращает вошедший в имени пользователя
  • создайте «тупую» службу REST-сервиса drupal, чтобы действовать как шлюз для всех моих вызовов REST, который авторизует/аутентифицирует, затем вводит имя пользователя перед прохождением к серверной службе Java.
  • Статья в https://lists.wisc.edu/read/messages?id=7777296#7777296 заставила меня задаться вопросом, Я мог бы уйти от ума h вызывает службу Drupal (только в начале каждого сеанса службы Java), который принимает идентификатор сеанса Drupal и возвращает текущего пользователя и его роли. Я мог бы сконфигурировать его в своей службе Java, чтобы он повторил этот вызов каждые x секунд или y, чтобы проверить наличие изменений или выходов.

Как все это делают? Это должна быть общая проблема для решения, не так ли? Если нет, что вы делаете вместо этого для безопасного доступа к аутентифицированным службам через AJAX? Я бы предпочел не вводить второй процесс управления пользователями в дополнение к Drupal, если это не неизбежно. DRY :)

Спасибо - это меня в тупик!

ответ

1

Рассматривая то, что вы делаете, и старайтесь как можно проще, я бы выбрал вариант первого варианта. Это в основном то, что делает текущий модуль node.js, хотя он делает это с уникальными токенами авторизации. Рабочий процесс что-то вроде этого:

  1. Когда зарегистрированный пользователь загружает страницу, уникальный маркер генерируется и хранится в базе данных Drupal и отправляется в браузер
  2. Когда браузер идет для подключения к узлу .js, он отправляет маркер auth вместе с запросом
  3. Сервер node.js, получив запрос с маркером в первый раз, подключится к веб-службе на сайте Drupal и убедитесь, что токен действителен и отправить любую информацию о пользователе, а также какие роли/etc у них есть.
  4. Затем сервер node.js сохраняет это внутренне для будущих запросов, так что ему не нужно пинговать сайт Drupal для каждого запроса.
  5. Когда пользователь выходит из Drupal, Drupal делает прямой запрос на сервер node.js с просьбой удалить токен для этого пользователя.

Похоже, что вы меняете приложение java для узла.js это должно быть довольно выполнимо, с тем преимуществом, что он может хорошо масштабироваться, если вы разделите его на несколько серверов в будущем.

+0

Это имеет смысл. Можно ли использовать переменную сеанса, хранящуюся в заголовках или cookie, как уникальный токен, чтобы удалить необходимость в дополнительном токене? – user1180316

Смежные вопросы