簡體   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