2016-02-18 2 views
3

Я пытаюсь использовать в jBPM-пользователях из существующего веб-сайта ASP.NET MVC.jBPM custom authorization

Как я понимаю из docs и этот форум темы (first, second) наилучшим решением будет внедрение UserGroupInfoProducer, что будет вызывать внешний сервис. Но из-за отсутствия опыта работы с Java я столкнулся с несколькими проблемами.

Первый подход: Создайте проект с требуемой реализацией, разверните его и настройте jBMP, чтобы использовать его.

Проблема была в интерфейсах реализации, объявленных в другом проекте, я попытался добавить зависимости maven, но после неудачи с некоторыми классами я только что добавил ссылку на требуемую банку.

Разверните его на jboss, так как война потерпела неудачу, развертывание, как jar, удалось, но сервер не нашел UserGroupInfoProducer и другие реализованные интерфейсы.

Другая проблема при изменении конфигурации jbmp-console. Единственный способ, который я нашел для этого, - это изменить архив напрямую, но я не это, это правильное решение.

Второй подход: Создайте собственный пакет jBPM с требуемыми классами. Проблема здесь в том, что я не знаю, какой репозиторий использовать для этого и как построить версию для моего сервера. Как я понял из этого link мне нужно использовать jbmp-console-ng, только Maven задача создания войны пакет, который я нашел в jbpm-console-ng-showcase я попытался запустить его (релиз 6.2.0 Final) на:

  • On Windows: не удалось выполнить из-за ошибки maven о длинном пути, после переноса проекта на градир и исключения зависимостей от jmxtools-1.2.1.jar и jmxri-1.2.1.jar он создал войну, но jboss не смог запустить службу.

  • На Mac и Ubuntu с использованием виртуального окна: для этого требуется понизить java до 1,6 и построить войну после этого, но не удалось развернуть должное дублирование некоторых классов.

Как я понимаю, для каждой версии сервера необходимо создавать разные версии, но я не знаю, как это сделать.

Третий подход: Создайте моделирование поддерживаемых способов авторизации. Насколько я понимаю, JBMP поддерживает LDAP, JAAS, базу данных и файл. База данных и файлы потребуют дублирования пользователей, поэтому я исследовал моделирование LDAP или JAAS (желательно с использованием C#), но не нашел приемлемого способа.

Я буду очень признателен за любые рекомендации, какие из этих подходов могут работать или какие-либо другие предложения. Особенно о строительстве войны jbmp-console.

используется версия: jBPM (6.2.0 Final), JBoss (Wildfly 8.1.0 Final), Java (1.8.0.73), Ant (1.9.6), Gradle (2,11), IntelliJ IDEA (15.0.3).

ответ

4

После нескольких недель попыток и ошибок я наконец-то смог предоставить полностью настраиваемый модуль авторизации для JBPM-пакета (kid-wb, server and dashbuilder) в нашем приложении.Это было нелегко и требовало некоторой магии - перезапись двух классов не будет делать этого :)

Мои требования были довольно сложными, а окончательное решение состояло из kie-wb, server, dashbuiler и внешней аутентификации, которые предоставляются службой REST Web Service отвечают пользователям с ролями на основе токена, прошедшего в сеансе. Еще одна вещь, о которой вы должны помнить, это то, что kie-wb и сервер обмениваются данными с помощью аутентификации BASIC - если вы хотите использовать сервер, вы также должны предоставить два возможных метода аутентификации. Я не смогу публиковать здесь какой-либо код, потому что это не проект с открытым исходным кодом, но я постараюсь помочь, насколько смогу.

Если вы используете WildFly, как вы говорите выше, что вы должны смотреть на это Undertow Servlet Extension

Перезапись метод handleDeployment позволяют написать свой собственный IdentityManager (если он вам нужен) и зарегистрировать свой собственный AuthenticationMechanism.

Чтобы реализовать свой собственный AuthenticationMechanism вы должны смотреть на этот проект Custom Spnego Auth for WildFly

Мое решение было основано на упомянутый выше проект - вы не должны выполнять каждый класс - в моем случае писать свой собственный класс, реализующий AuthenticationMechanism было достаточно для получения пользовательской аутентификации, работающей в kie-wb (не для сервера).

Итак, если вы уже перезаписали расширение сервлета (и зарегистрировались путем размещения файла io.undertow.servlet.ServletExtension, содержащего собственное имя класса расширения сервлета внутри/WEB-INF/classes/META-INF/services/путь .war файл) и реализованный пользовательский метод аутентификации. Следующее, что вам нужно сделать, это написать класс, реализующий интерфейс org.jboss.security.auth.spi.LoginModule. Если вы не хотите реализовать этот интерфейс самостоятельно, вы можете просто расширить один из уже реализованных классов из WildFly - например, UsernamePasswordLoginModule или другое.

Для того, чтобы WildFly знать, что мы используем нестандартную Войти модуля мы должны изменить автономную-full.xml следующим образом:

<subsystem xmlns="urn:jboss:domain:security:1.2"> 
     <security-domains> 
      <security-domain name="other" cache-type="default"> 
       <authentication> 
        <login-module code="com.package.CustomAuth" flag="required"> 
        </login-module> 
       </authentication> 
      </security-domain> 
     </security-domains> 
    </subsystem> 

, а затем ... мы почти закончили :) Одно осталось сделать это, чтобы изменить дескриптор развертывания внутри .war-файла. Мы должны изменить web.xml внутри/WEB-INF реж следующим образом:

<login-config> 
<auth-method>BASIC?silent=true,CUSTOM</auth-method> 
    <form-login-config> 
    <form-login-page>/login.jsp</form-login-page> 
    <form-error-page>/login_failed.jsp</form-error-page> 
    </form-login-config> 
</login-config> 

CUSTOM это имя вашего механизма аутентификации, который был зарегистрирован в классе реализации Servlet класса Extension.

Выше инструкция не распространяется на kie-wb < -> kie server communication. Этот вопрос был более сложным и требовал нескольких обходных решений. Как я уже говорил, я не смогу предоставить полное решение с более подробными примерами, но не стесняйтесь спрашивать меня, ссылаясь на это дело.