REST服务的身份验证不适用于jBPMKIE服务器和Business Central和Keycloak

问题描述

我正在研究jBPM(KIE服务器和业务中心)和Keycloak。孤立地,我设法成功运行了所有这些软件。但是,当我尝试在它们之间进行集成时,网站上的用户身份验证有效(Keycloak登录页面可访问Business Central网站),但是似乎是REST服务的身份验证(无论是从KIE服务器还是从Business Central)进行呼叫,停止工作(未经授权),并且KIE Server无法与其控制器(Business Central)同步。

以下是关于该主题的更多详细信息。

我一直在寻找解决问题的方法,但没有成功。

尽管我已经查阅了这个出色的网站,但这是我的第一个问题,对于建议将哪个文件附加到该问题上,我没有太多参考。如果您看到一个特定的文件,请签名,我将附加它。

感谢您的帮助。

有关环境和遇到的问题的注释(有用的信息):

  • 在Windows 10上仅安装了安装了Keycloak适配器的1个Wildfly 20.0.1环境(服务器),托管KIE Server 7.43.1.Final,Business Central 7.43.1.Final和Keycloak 11.0.2。 >

  • 在Keycloak中,使用名称VHLLEmpresaRealm和2个客户端(应用程序)创建了Realm:

  1. VHLLEmpresaKIEServer:具有公共访问权限。
  2. VHLLEmpresaBusinessCentral:具有机密访问权限。
  • 在Keycloak中,密码为kieserver1的用户kieserver!创建并分配给各种角色(Realm和Client),其中包括admin,rest-all,kie-server,kiegmmt和user。

  • 使用kieserver用户进行身份验证以及您在Business Central网站上的密码与Keycloak(Keycloak登录页面)正确集成。通过Google身份验证(社交登录)正常工作。

  • Business Central配置为显示和管理在Keycloak中注册用户

  • 发现的问题:

  1. 启动Wildfly服务器时,KIE服务器无法与Controller Business Central同步(请参阅启动日志-Doc 06)。在启动时多次重复以下尝试,但未成功,随后是NullPointerException,并在下面复制了行:

17:13:30,057信息[org.kie.server.controller.websocket.client.WebSocketKieServerControllerImpl](KieServer-ControllerConnect)Kie Server指向非Web套接字控制器'http:// localhost:8080 / business-central /休息/控制器”,使用认的REST机制 17:13:30,214错误[org.keycloak.services.error.KeycloakErrorHandler](认任务6)未捕获的服务器错误java.lang.NullPointerException 在org.keycloak.storage.StorageId.isLocalStorage(StorageId.java:77) 在org.keycloak.credential.UserCredentialStoreManager.getStoreForUser(UserCredentialStoreManager.java:54) ... 17:13:30,214警告[org.kie.server.services.impl.controller.DefaultRestControllerImpl](KieServer-ControllerConnect)在http:// localhost:8080 / business-central / rest / controller / controller与控制器同步时遇到异常/ wildfly-kieserver错误将PUT请求发送到http:// localhost:8080 / business-central / rest / controller / server / wildfly-kieserver响应代码401

时出错

链接到完整文件https://drive.google.com/file/d/1kr47ap9frsCQB8oyQE2dEm2gfl7__s0G/view?usp=sharing

  1. 在Business Central网站的“部署”页面(也显示服务器)上,KIE Server服务器未显示为可用(请参阅Doc 07)。

链接到完整文件https://drive.google.com/file/d/1lKiCZdOp7yRvHibfgJ8ZOE_dZIAnkE6U/view?usp=sharing

  1. 在用于访问Business Central REST服务的CURL命令中,即使通过了kieserver用户和密码,也未获得答案的授权(请参阅Doc 08)。

命令:curl -X GET http:// kieserver:kieserver1!@localhost:8080 / business-central / rest / repositories -v 响应:ErrorUnauthorized

链接到完整文件

https://drive.google.com/file/d/1V_CH_hiTkhLh-AtgRvP0YkZ3afwBc4tZ/view?usp=sharing

其他文件

Wildfly设置-STANDALONE-FULL.XML https://drive.google.com/file/d/1f0xvRDPiId1RymZkMGIUaIMB_EuGpbud/view?usp=sharing

解决方法

我不确定这是否是解决问题的正确方法,但是在继续研究和研究几天之后,使用CURL命令调用Business Central服务(如下),我获得了访问权限令牌并通过网站jwt.io,我在该令牌的内容中注意到,请求令牌的Keycloak客户端ID未填写受众(音频)字段。

curl -d“ grant_type = password” -d“ client_id = VHLLEmpresaBusinessCentral” -d“ client_secret = 020c8841-50ee-437e-af16-XXXXXXXX” -d“ username = kieserver” -d“ password = kieserverXXXXX” -d“ scope = VHLLEmpresaEscopo“ http:// localhost:8180 / auth / realms / VHLLEmpresaRealm / protocol / openid-connect / token

因此,我创建了一个客户范围,为观众创建了一个映射器,以添加客户自己的ID,并将该客户范围与相应的客户相关联。

第二个必要的更改是使用涉及的每个客户的“直接授予”值覆盖直接授予流程。

通过上述两项更改,KIE Server和Business Central之间的同步已恢复工作。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...