You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Keycloak中通过Java程序编程创建客户端?

How to Create a Keycloak Client Programmatically with Java

Great question! Creating a Keycloak client programmatically via Java is totally doable using the official Keycloak Admin Client library. Let me walk you through the step-by-step process, including all the essential code snippets and configuration details.

1. Add the Keycloak Admin Client Dependency

First off, you'll need to include the official Keycloak Admin Client in your project. If you're using Maven, add this to your pom.xml:

<dependency>
    <groupId>org.keycloak</groupId>
    <artifactId>keycloak-admin-client</artifactId>
    <version>22.0.5</version> <!-- Use the version matching your Keycloak server -->
</dependency>
<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jackson2-provider</artifactId>
    <version>6.2.7.Final</version>
</dependency>

Make sure the version matches your running Keycloak server to avoid compatibility headaches.

2. Configure Admin Client Connection

Next up, you need to set up the connection to your Keycloak server using an admin account (since creating clients requires realm-level admin permissions). Here's how to initialize the Keycloak client instance:

import org.keycloak.admin.client.Keycloak;
import org.keycloak.admin.client.KeycloakBuilder;

public class KeycloakClientCreator {
    public static void main(String[] args) {
        // Admin client configuration
        String serverUrl = "http://localhost:8080"; // Your Keycloak server URL
        String realm = "master"; // Default admin realm (adjust if you use a custom admin realm)
        String clientId = "admin-cli"; // Default admin CLI client included with Keycloak
        String username = "admin"; // Your admin username
        String password = "admin"; // Your admin password

        // Initialize Keycloak admin client
        Keycloak keycloak = KeycloakBuilder.builder()
                .serverUrl(serverUrl)
                .realm(realm)
                .clientId(clientId)
                .username(username)
                .password(password)
                .build();

3. Build and Create the Client Representation

Now, let's define the client you want to create using ClientRepresentation. This object holds all the core settings for your new client:

import org.keycloak.representations.idm.ClientRepresentation;
import java.util.List;

// Inside the main method or a dedicated helper method
ClientRepresentation newClient = new ClientRepresentation();
newClient.setClientId("my-programmatic-client"); // Unique identifier for the client
newClient.setEnabled(true); // Enable the client right after creation
newClient.setPublicClient(false); // Set to true for SPAs/mobile apps; false for backend services
newClient.setRedirectUris(List.of("http://localhost:3000/*")); // Allowed redirect URIs (critical for security)
newClient.setSecret("my-secure-client-secret"); // Only needed for confidential clients
newClient.setClientAuthenticatorType("client-secret"); // Auth type for confidential clients
newClient.setStandardFlowEnabled(true); // Enable authorization code grant flow
newClient.setDirectAccessGrantsEnabled(true); // Enable password grant (use sparingly)

// Create the client in your target realm (replace "my-target-realm" with your actual realm name)
keycloak.realm("my-target-realm").clients().create(newClient);

Key Configuration Notes:

  • Public vs Confidential Clients: Public clients (like SPAs) don't use a secret, so set publicClient to true and omit the secret. Confidential clients (backend APIs) need a secret for authentication.
  • Redirect URIs: Always specify exact or wildcarded URIs that your client will use for redirects—never leave this empty in production.
  • Grant Types: Enable only the grant types your client actually needs to minimize security risks.

4. Clean Up and Handle Exceptions

Don't forget to close the Keycloak client to release resources, and add exception handling to catch any API errors (like duplicate client IDs or permission issues):

try {
            // Client creation code here
            System.out.println("Client created successfully!");
        } catch (Exception e) {
            System.err.println("Error creating client: " + e.getMessage());
            e.printStackTrace();
        } finally {
            if (keycloak != null) {
                keycloak.close();
            }
        }
    }
}

5. Verify the Client

After running the code, log into your Keycloak admin console, navigate to your target realm, and check the "Clients" section—your new client should be listed and enabled.

One last check: Make sure the admin account you're using has the realm-admin role assigned in the target realm. If you get a 403 Forbidden error, double-check the admin's role permissions.

内容的提问来源于stack exchange,提问作者Programmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:49:42