jBPM自定义授权

jBPM custom authorization

我正在尝试在现有 ASP .NET MVC 网站的 jBPM 用户中使用。

据我所知 docs and this forum topics (first, second) 最好的解决方案是实施 UserGroupInfoProducer 调用外部服务。但是由于缺乏 java 的经验,我遇到了几个问题。

第一种方法:创建具有所需实现的项目,部署它并配置 jBMP 以使用它。

问题出在另一个项目中声明的实现接口中,我尝试添加 Maven 依赖项,但在某些 类 失败后,我刚刚添加了对所需 jar 的引用。

像war一样在jboss上部署失败,像jar一样部署成功但是服务器没有找到UserGroupInfoProducer和其他实现的接口。

更改 jbmp-console 配置的另一个问题。我找到的唯一方法是直接修改存档,但我不认为这是正确的解决方案。

第二种方法: 创建自己的 jBPM 包,需要 类。 这里的问题是我不知道使用什么存储库以及如何为我的服务器构建版本。 正如我从这个 link I need to use jbmp-console-ng 中了解到的那样,我发现只有用于创建 war 包的 Maven 任务在 jbpm-console-ng-showcase 中,我已经尝试 运行 它(6.2.0 Final 版)在:

据我所知,您需要为每个版本的服务器进行不同的构建,但我不知道该怎么做。

第三种方法:创建支持的授权方式的模拟。据我了解,jBMP 支持 LDAP、JAAS、数据库和文件。数据库和文件需要重复用户,所以我研究了模拟 LDAP 或 JAAS(最好使用 C#),但没有找到任何可接受的方法。

如果您能就此方法中的哪一个可行或提出一些其他建议提出建议,我将不胜感激。尤其是 jbmp-console 的 war。

使用的版本: 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).

经过几周的尝试和错误方法,我终于设法在我们的应用程序中为 JBPM 套件(kid-wb、服务器和 dashbuilder)提供完全自定义的授权模块。这并不容易,需要一些魔法 - 覆盖两个 classes 是不行的 :)

我的要求非常复杂,最终解决方案包括 kie-wb、服务器、dashbuiler 和外部身份验证,它们由 REST Web 服务响应用户提供,角色基于会话中传递的令牌。另一件你必须记住的事情是 kie-wb 和服务器通过 BASIC 身份验证进行通信——如果你想使用服务器,你还必须提供两种可能的身份验证方法。我不能在这里发布任何代码,因为它不是一个开源项目,但我会尽力提供帮助。

如果你像上面说的那样使用WildFly,你应该看的是Undertow Servlet Extension

覆盖 handleDeployment 方法允许您编写自己的 IdentityManager(如果需要的话)并注册您的自定义 AuthenticationMechanism。

要实现您自己的 AuthenticationMechanism,您应该查看此项目 Custom Spnego Auth for WildFly

我的解决方案基于上述项目 - 你不必实现每个 class - 在我的例子中,编写我自己的 class 实现 AuthenticationMechanism 足以让自定义身份验证在 kie 中工作-wb(虽然不适用于服务器)。

因此,如果您已经覆盖了 Servlet 扩展(并通过将包含自定义 servlet 扩展 class 名称的文件 io.undertow.servlet.ServletExtension 放在 .war 的 /WEB-INF/classes/META-INF/services/ 路径中进行了注册文件 ) 并实现自定义 AuthenticationMechanism 接下来你应该做的是编写 class 实现 org.jboss.security.auth.spi.LoginModule 接口。如果你不想自己实现这个接口,你可以从 WildFly 扩展一个已经实现的 classes - 例如 UsernamePasswordLoginModule 或其他。

为了让 WildFly 知道我们使用的是非标准登录模块,我们必须修改 standalone-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-INF 目录中更改 web.xml 如下:

<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 是在 class 内注册的身份验证机制的名称,实现 Servlet 扩展 class。

以上说明不包括 kie-wb <-> kie 服务器通信。这件事比较复杂,需要一些变通办法。正如我之前所说,我无法提供带有更详细示例的完整解决方案,但请随时问我有关此案例的任何问题。