c# - jBPM自定义授权

标签 c# authentication jakarta-ee jboss jbpm

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

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

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

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

像war一样部署到jboss上失败,像jar部署成功但是服务端没有找到UserGroupInfoProducer等实现的接口(interface)。

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

第二种方法:创建自己的包含所需类的 jBPM 包。 这里的问题是我不知道使用什么存储库以及如何为我的服务器构建版本。 据我了解link我需要使用 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 的依赖后,它创建了 war,但 jboss 失败了开始服务。

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

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

第三种方法:创建支持授权方式的模拟。据我了解,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)提供完全自定义的授权模块。这并不容易,需要一些魔法——覆盖两个类是不行的:)

我的要求非常复杂,最终解决方案包括 kie-wb、服务器、dashbuiler 和外部身份验证,它们由 REST Web 服务响应用户提供,这些用户具有基于 session 中传递的 token 的角色。另一件你必须记住的事情是 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 放入 .war 文件的/WEB-INF/classes/META-INF/services/路径中进行注册) 并实现自定义 AuthenticationMechanism 接下来您应该做的是编写实现 org.jboss.security.auth.spi.LoginModule 接口(interface)的类。如果您不想自己实现这个接口(interface),您可以只扩展 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>

然后...我们几乎完成了:) 剩下要做的一件事是修改 .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 <-> kie 服务器通信。这件事比较复杂,需要一些变通办法。正如我之前所说,我无法提供带有更详细示例的完整解决方案,但请随时问我有关此案例的任何问题。

关于c# - jBPM自定义授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35493102/

相关文章:

c# - Unity 5 游戏对象序列化

CakePHP Auth 拒绝管理路由页面

authentication - firebase 简单的电子邮件密码身份验证

jakarta-ee - Tomcat多实例

java - 捕获 EJBTransactionRolledbackException

c# - 使用 Mongodb-CSharp Driver 调用函数

c# - C#/Unity3D中的分段线性整数曲线插值

c# - MVC 5/ASP.Net 4.5 安全地存储连接字符串

c# - 最佳实践返回值与异常与枚举

java - 显示ArrayList(EJB session +Servlet+JSP,无JDBC)