Как защитить сервис Java REST с помощью Drupal? - PullRequest
1 голос
/ 30 марта 2012

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

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

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

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

Вещи, о которых я думал:

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

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

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

1 Ответ

1 голос
/ 03 апреля 2012

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

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

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

...