编程语言
首页 > 编程语言> > C#-jBPM自定义授权

C#-jBPM自定义授权

作者:互联网

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

docs和本论坛主题(first,second)可以理解,最好的解决方案是实现UserGroupInfoProducer,该方法将调用外部服务.但是由于缺乏Java经验,我遇到了几个问题.

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

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

像战争一样将其部署在jboss上失败,像jar一样成功部署,但服务器未找到UserGroupInfoProducer和其他已实现的接口.

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

第二种方法:使用必需的类创建自己的jBPM软件包.
这里的问题是我不知道该使用哪个存储库以及如何为服务器构建版本.
据我从link的了解,我需要使用jbmp-console-ng,只有在jbpm-console-ng-showcase中找到的用于创建war包的maven任务,我才尝试在以下版本上运行它(版本6.2.0 Final):

>在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).

解决方法:

经过数周的尝试和错误处理,我终于设法在我们的应用程序中为JBPM套件(kid-wb,server和dashbuilder)提供了完全自定义的授权模块.这并不容易,并且需要一些魔术-覆盖两个类不会做到这一点:)

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

如果您如上所述使用WildFly,则应查看的是Undertow Servlet Extension

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

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

我的解决方案基于上述项目-您不必实现每个类-在我的情况下,编写自己的实现AuthenticationMechanism的类足以使自定义身份验证在kie-wb中工作(尽管不适用于服务器).

因此,如果您已经覆盖了Servlet扩展(并通过将文件io.undertow.servlet.ServletExtension包含在您的.war文件的/ WEB-INF / classes / META-INF / services /路径内的包含自定义servlet扩展类名称的文件中进行了注册)并实现了自定义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 Extension类的类中注册的身份验证机制的名称.

以上说明未涵盖kie-wb<->. kie服务器通信.这件事比较复杂,需要一些解决方法.就像我之前说过的那样,我将无法提供包含更多详细示例的完整解决方案,但是请随时问我有关此案例的任何信息.

标签:authentication,jboss,jbpm,c,java-ee
来源: https://codeday.me/bug/20191027/1943619.html