Идентификатор клиента в jboss httpinvoker (аудит)

Я использую httpinvoker в JBoss 4.0.4 (немного старый) для вызовов EJB. Поскольку существует так много клиентов, которые делают вызовы на мой сервер, я хочу идентифицировать клиентов для каждого вызова на сервере.

Есть ли способ сделать это с помощью JBoss httpinvoker?

Я мог бы представить добавление заголовка для идентификации моего клиента в каждом HTTP-запросе, но не могу найти способ добавить заголовок в httpinvoker.

1 ответ

Аудит основывается на имени и, следовательно, на схеме аутентификации.

Поэтому я предлагаю использовать стандартную инфраструктуру аутентификации клиента для решения вашей проблемы. Это работает и для RMI (это не связано с HTTP), и идентификатор пользователя даже передается в ваши EJB.

сервер

  • Поместите EJB в security-domain (ejb.jar: META-INF/jboss.xml)
  • Вы могли бы использовать application-policy другой, который просто UsersRolesLoginModule (CONF / Логин-config.xml); это политика по умолчанию, она уже настроена.
  • Добавьте users.properties и role.properties в ваш файл ejb.jar (пакет верхнего уровня): они используются UsersRolesLoginModule
  • Для каждого пользователя добавьте его имя и (фиктивный) пароль в users.properties

клиент

  • Создайте класс обратного вызова, который реализует javax.security.auth.callback.CallbackHandler: Этот обратный вызов используется, когда для аутентификации требуются пользователь и пароль.
  • Создать javax.security.auth.login.LoginContext; передать обработчик обратного вызова в качестве второго аргумента; вызов login() по случаю LoginContext
  • Обычно подключайтесь к серверу EJB, используя InitialContext
  • добавлять -Djava.security.auth.login.config=.../jboss-4/client/auth.conf когда вы запускаете клиент

Таким образом, идентификатор пользователя передается от клиента к EJB (как часть стандартного процесса аутентификации). Теперь в методах EJB вы можете получить идентификатор пользователя, вызвав getCallerPrincipal() на SessionContext пример. Я проверил это против JBoss 4.2.3

Дополнительная информация: аутентификация клиента JBoss


Приложение 1:

При использовании RMI или HTTP пароль не передается безопасным способом. В этом случае просто используйте фиктивный пароль, это нормально для аудита.

С другой стороны, если вы используете RMI по SSL или HttpInvoker по HTTPS, вы можете быстро перейти к реальной и безопасной аутентификации.


Приложение 2:

Я не уверен, работает ли он без определения ролей. Возможно, вам придется

  • Добавьте строку в role.properties для каждого пользователя: например, добавьте роль подключения
  • Добавьте также определения ролей в ejb-jar.xml: security-role-ref для каждого EJB и security-role а также method-permission в assembly-descriptor

Обновить

Поскольку модуль входа уже существует, возможна и другая возможность:

Если у вас есть исходный код модуля входа в систему, вы можете использовать другой TextCallback получить дополнительную информацию от клиента (в вашем случае идентификатор пользователя). Информация может быть использована для создания пользовательских Principal, В EJB, результат getCallerPrincipal() может быть приведен к обычному принципалу.

Другие вопросы по тегам