如何使用管理客户端访问密钥斗篷?

How to access keycloak with the admin-client?

我试图在 spring 引导应用程序中使用 keycloak-admin-client 更改 keycloak 中用户的角色,但我什至无法实例化 keycloak。

我试图在此处获取 keycloak 服务器,但我收到 InstantiationError

    String serverUrl = "http://localhost:8080/auth";
    String realm = "User-Service-Realm";
    String clientId = "admin-cli";

    Keycloak keycloak = Keycloak.getInstance(
      serverUrl,
      realm,
      "admin",
      "admin",
      clientId);
Exception in thread "main" java.lang.InstantiationError: org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder
    at org.keycloak.admin.client.Keycloak.<init>(Keycloak.java:58)
    at org.keycloak.admin.client.Keycloak.getInstance(Keycloak.java:106)
    at de.uni.stuttgart.isw.ccm.userservice.api.KeycloakAdminClientExample.main(KeycloakAdminClientExample.java:31)

显然这是管理客户端本身的问题,因为 keycloak 构建器是基于 resteasyclientbuilder 的。

您似乎有不兼容的库或库版本。错误消息抱怨 ResteasyClientBuilder 是抽象的。在我们的工作项目中情况并非如此。

作为参考,这里是我们 gradle 文件的摘录,因此您可以看到库版本的工作组合:

implementation 'org.keycloak:keycloak-admin-client:6.0.1'
implementation 'javax.ws.rs:javax.ws.rs-api:2.0'
implementation 'org.jboss.resteasy:resteasy-jaxrs:3.6.3.Final'
implementation 'org.jboss.resteasy:resteasy-client:3.6.3.Final'
implementation 'org.jboss.resteasy:resteasy-jackson2-provider:3.6.3.Final'

更新:

ResteasyClientBuilderRESTEasy 的 4.0 版中成为抽象 class。所以看起来你正在使用版本 4.x,而 Keycloak 期望 3.x.