jBPM自定义授权

时间:2016-02-18 21:49:20

标签: c# authentication java-ee jboss jbpm

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

据我所知docs和此论坛主题(firstsecond),最佳解决方案是实施将调用外部服务的UserGroupInfoProducer。但由于缺乏java经验,我遇到了几个问题。

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

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

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

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

第二种方法:使用必需的类创建自己的jBPM包。 这里的问题是我不知道存储库使用什么以及如何为我的服务器构建版本。 据我所知link,我需要使用jbmp-console-ng,只有创建war包的maven任务我在jbpm-console-ng-showcase我试图运行它(版本6.2.0最终版) )上:

  • 在Windows上:由于关于长路径的maven错误而执行失败,将项目迁移到gradle并排除jmxtools-1.2.1.jar和jmxri-1.2.1.jar上的依赖项后,它创建了war但是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)。

1 个答案:

答案 0 :(得分:4)

经过几周的尝试和错误处理后,我终于设法在我们的应用程序中为JBPM套件(kid-wb,server和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中工作(尽管不是服务器)。 / p>

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

为了让WildFly知道我们正在使用非标准的Login模块,我们必须修改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是在实现Servlet扩展类的类中注册的身份验证机制的名称。

以上说明不包括kie-wb&lt; - &gt; kie服务器通信。这个问题比较复杂,需要一些解决方法。正如我之前所说,我将无法提供更详细的示例的完整解决方案,但随时可以向我询问任何涉及此案例的内容。