繁体   English   中英

通过spring引导创建keycloak用户

[英]Creating keycloak users through spring boot

我正在尝试创建一个 keycloak object 以使用以下代码使用 keycloak 注册新用户:

public Keycloak getInstance() {
    if (keycloak == null) {

        return KeycloakBuilder.builder()
                .realm(realm)
                .serverUrl(serverURL)
                .clientId(clientID)
                .clientSecret(clientSecret)
                .grantType(OAuth2Constants.CLIENT_CREDENTIALS)
                .build();
    }
    return keycloak;
}

但我不断收到以下错误:

java.lang.ClassCastException: class org.jboss.resteasy.client.jaxrs.internal.ResteasyClientBuilderImpl cannot be cast to class javax.ws.rs.client.ClientBuilder (org.jboss.resteasy.client.jaxrs.internal.ResteasyClientBuilderImpl and javax .ws.rs.client.ClientBuilder 位于 org.keycloak.admin.client.ClientBuilderWrapper.create(ClientBuilderWrapper.java:29) 的加载程序“app”的未命名模块中~[keycloak-admin-client-17.0.1.Z68995FCBF432492D15484DAC04 :17.0.1] at org.keycloak.admin.client.spi.ResteasyClientClassicProvider.newRestEasyClient(ResteasyClientClassicProvider.java:35) ~[keycloak-admin-client-17.0.1.jar:17.0.1] at org.keycloak.admin .client.Keycloak.newRestEasyClient(Keycloak.java:98) ~[keycloak-admin-client-17.0.1. jar:17.0.1] at org.keycloak.admin.client.Keycloak.<init>(Keycloak.java:89) ~[keycloak-admin-client-17.0.1.jar:17.0.1] at org.keycloak. admin.client.KeycloakBuilder.build(KeycloakBuilder.java:146) ~[keycloak-admin-client-17.0.1.jar:17.0.1] at com.microfinanceBank.Customer.Config.KeycloakProvider.getInstance(KeycloakProvider.java:41 ) ~[classes/:na] at com.microfinanceBank.Customer.service.KeycloakAdminClientServices.wow(KeycloakAdminClientServices.java:31) ~[classes/:na] at com.microfinanceBank.Customer.controller.CustomerController.getCustomer(CustomerController.java :68) ~[classes/:na] 在 com.microfinanc eBank.Customer.controller.CustomerController$$FastClassBySpringCGLIB$$8c9f9beb.invoke(<generated>) ~[classes/:na]

以下是我的 keycloak 依赖项:

<dependency>
   <groupId>org.keycloak</groupId>
   <artifactId>keycloak-admin-client</artifactId>
   <version>17.0.1</version>
</dependency>
<dependency>
   <groupId>org.jboss.resteasy</groupId>
   <artifactId>resteasy-client</artifactId>
   <version>6.1.0.Alpha1</version>
</dependency>
<dependency>
   <groupId>org.jboss.resteasy</groupId>
   <artifactId>resteasy-jackson2-provider</artifactId>
   <version>6.1.0.Alpha1</version>
</dependency>
<dependency>
   <groupId>org.jboss.resteasy</groupId>
   <artifactId>resteasy-multipart-provider</artifactId>
   <version>6.1.0.Alpha1</version>
</dependency>
<dependency>
   <groupId>com.guicedee.services</groupId>
   <artifactId>jakarta.ws.rs-api</artifactId>
   <version>1.2.2.1</version>
</dependency>

我究竟做错了什么?

我尝试添加一些依赖项,但一直出错。 请问我该怎么办。在此先感谢

您可以将 keycloak 的 SDK 用于您的 springboot 应用程序。 pom.xml中包含这两个依赖项

<dependency>
  <groupId>org.keycloak</groupId>
  <artifactId>keycloak-spring-boot-starter</artifactId>
  <version>18.0.2</version>
</dependency>
<dependency>
  <groupId>org.keycloak</groupId>
  <artifactId>keycloak-admin-client</artifactId>
  <version>18.0.2</version>
</dependency>

之后在你的 springboot 应用程序中创建一个 keycloak 的实例。

public Keycloak getAdminKeycloakUser() {
    return KeycloakBuilder.builder().serverUrl("keycloak-auth-url")
            .grantType("password").realm("realm-name")
            .clientId("client-id")
            .username("admin-user")
            .password("admin-password")
            .resteasyClient(new ResteasyClientBuilder().connectionPoolSize(10).build()).build();
}

上述方法将为您提供在 Keycloak 中创建用户所需的管理员用户。 下一步是获取 realm,因为 realm 管理用户。

public RealmResource getRealm() {
    return getAdminKeycloakUser().realm(realm);
}

最后,现在您可以使用org.keycloak.representations.idm.UserRepresentation创建用户。

public void createUser() {
    UserRepresentation userRepresentation = new UserRepresentation();

    userRepresentation.setUsername("username");
    userRepresentation.setFirstName("first-name");
    userRepresentation.setLastName("last-name");
    userRepresentation.setEmail("test@email.com");

    Response response = getRealm().realmResource.users().create(userRepresentation);
    //If user is created successfully 200 is returned for response status.

    //Set password flow
    CredentialRepresentation passwordCred = new CredentialRepresentation();
    String userId = CreatedResponseUtil.getCreatedId(response);
    passwordCred.setTemporary(false);
    passwordCred.setType("password");
    passwordCred.setValue("some-password");
    UserResource userResource = realmResource.users().get(userId);
    userResource.resetPassword(passwordCred);
}

keycloak-spring-boot-starter已弃用,请勿使用。 你可能会在这里找到替代品

我也不会使用keycloak-admin-client 管理员 API 有据可查 只需使用您最喜欢的 REST 客户端(如果您愿意,可以使用 spring-boot 功能来配置 OAuth2 REST 客户端)并向您的 Keycloak 服务器发送请求。

UserRepresentation userRepresentation = new UserRepresentation();
userRepresentation.setUsername("username");
userRepresentation.setFirstName("first-name");
userRepresentation.setLastName("last-name");
userRepresentation.setEmail("test@email.com");
// set other required values

javax.ws.rs.core.Response response = KeycloakBuilder.builder().build().realm("your-realm-nam").users().create(userRepresentation);
if (response != null && response.getStatusInfo().getFamily() == Family.SUCCESSFUL) 
{
    return org.keycloak.admin.client.CreatedResponseUtil.getCreatedId(response);        // returns String (Id of created User)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM