jBPM自定义授权

And*_*yak 3 c# authentication jboss jbpm jakarta-ee

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

正如我从文档和这个论坛主题(第一第二)中了解到的那样,最佳解决方案是实现UserGroupInfoProducer将调用外部服务。但是由于缺乏Java经验,我遇到了几个问题。

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

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

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

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

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

  • 在 Windows 上:由于 maven 关于长路径的错误而无法执行,在将项目迁移到 gradle 并排除对 jmxtools-1.2.1.jar 和 jmxri-1.2.1.jar 的依赖后,它创建了战争,但 jboss 无法启动服务。

  • 在 Mac 和 Ubuntu 上使用 virtual box:它需要将 java 降级到 1.6 并在此之后构建 war,但由于某些类的重复而无法部署。

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

第三种方法:创建模拟支持的授权方式。据我了解 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)。

小智 5

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

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

如果您像上面所说的那样使用 WildFly,那么您应该查看 Undertow Servlet Extension

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

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

我的解决方案基于上面提到的项目——你不必实现每个类——在我的情况下,编写我自己的类实现 AuthenticationMechanism 足以让自定义身份验证在 kie-wb 中工作(但不适用于服务器)。

因此,如果您已经覆盖了 Servlet 扩展(并通过将包含自定义 servlet 扩展类名的文件 io.undertow.servlet.ServletExtension 注册到 /WEB-INF/classes/META-INF/services/ .war 文件的路径中)并实现自定义 AuthenticationMechanism 接下来你应该做的是编写实现 org.jboss.security.auth.spi.LoginModule 接口的类。如果你不想自己实现这个接口,你可以从 WildFly 扩展已经实现的类之一 - 例如 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>
Run Code Online (Sandbox Code Playgroud)

然后...我们几乎完成了:) 剩下要做的一件事是修改 .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>
Run Code Online (Sandbox Code Playgroud)

CUSTOM 是在实现 Servlet 扩展类的类中注册的身份验证机制的名称。

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