Keycloak API createUser Java
I finally got it to work. Here is the solution for future reference.
UserRepresentation userRepresentation = new UserRepresentation();
userRepresentation.setUsername("randomUser");
Response response = usersResource.create(userRepresentation);
logger.info("Response | Status: {} | Status Info: {}", response.getStatus(), response.getStatusInfo());
String userId = response.getLocation().getPath().replaceAll(".*/([^/]+)$", "$1");
UserResource userResource = usersResource.get(userId);
I then update the userResource with further information.
![Bouramas](https://i.stack.imgur.com/NlgTI.png?s=256&g=1)
Bouramas
Currently working as a Software Engineer MSc Software Development graduate from the University of Glasgow.
Updated on June 17, 2022Comments
-
Bouramas about 2 years
Sample Java Code I use:
public static AjaxResponse createUser(User newUser) { Keycloak keycloak = Keycloak.getInstance( SERVER_URL, REALM, USERNAME, PASSWORD, CLIENT_ID); // Get Realm RealmResource realmResource = keycloak.realm(REALM); UsersResource userResource = realmResource.users(); // Create User Representation UserRepresentation user = getUserRepresentation(newUser); // Create user (requires manage-users role) try { System.out.println("Username: {}", userResource.get("USER-ID-HERE").toRepresentation().getUsername()); System.out.println("Count: " + userResource.count()); Response response = userResource.create(user); System.out.println("Response: " + response.getStatusInfo()); System.out.println("Response: " + response.getStatus()); System.out.println("Response: " + response.getMetadata()); } catch (Exception e) { System.out.println(ExceptionUtils.getStackTrace(e)); return new AjaxResponse("Fail", false); } return new AjaxResponse("Successful User Creation", true); } private static UserRepresentation getUserRepresentation(User newUser) { UserRepresentation user = new UserRepresentation(); user.setEnabled(true); user.setUsername(newUser.getUsername()); user.setFirstName(newUser.getFirstName()); user.setLastName(newUser.getLastName()); user.setEmail(newUser.getEmail()); CredentialRepresentation credentialRepresentation = new CredentialRepresentation(); credentialRepresentation.setTemporary(true); credentialRepresentation.setType(CredentialRepresentation.PASSWORD); credentialRepresentation.setValue(newUser.getUsername()); user.setCredentials(Collections.singletonList(credentialRepresentation)); }
The response I get when I run the code:
Username: USERNAME Correctly Identified here Count: 98 Response: Conflict Response: 409 Response: [Connection=keep-alive,Content-Length=46,Content-Type=application/json,Date=Tue, 03 Jul 2018 15:27:58 GMT,Server=WildFly/10,X-Powered-By=Undertow/1]`
Some thoughts: I added the count so to identify if the whole connection works at all. And it seems that the count returned is correct. So I successfully connect to keycloak but something else goes wrong when I try to create a user.
The dependencies in my pom.xml
<dependency> <groupId>org.keycloak</groupId> <artifactId>keycloak-servlet-filter-adapter</artifactId> <version>3.2.1.Final</version> </dependency> <dependency> <groupId>org.keycloak</groupId> <artifactId>keycloak-admin-client</artifactId> <version>3.2.1.Final</version> (Have also tried 3.1.0.Final and 3.2.0.Final) </dependency> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-client</artifactId> <version>3.1.4.Final</version> </dependency> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jackson2-provider</artifactId> <version>3.1.4.Final</version> </dependency> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jaxrs</artifactId> <version>3.1.4.Final</version> </dependency>
As I understood those dependencies are related as well:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson-version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>${jackson-version}</version> </dependency>
Other info:
Keycloak Version I use: 3.2.0
The Keycloak API can be found here
More information on the HTTP 409 Code can be found here
I would much appreciate any help or any guidance. Note Credentials and all variables have been checked, once, twice, thrice, and 10 times again. I've been searching for a complete working example. But most fail to specify the dependencies required and thus my code fails.
Note: I am also using Tomcat-8 and as I am searching deeper into the issue. I see that there are probably some special configurations for Tomcat8. Note that the authentication sign-in sign-out for my web-app already works as expected.
-
Bouramas almost 6 yearsThanks for the answer. I have checked that already. Unfortunately its something else.