Created
July 28, 2019 19:44
-
-
Save igorstojanovski/b992ce23d90e20eb8242af98d9376ab8 to your computer and use it in GitHub Desktop.
Using the Keycloak client to create a user, set a real role and then delete it.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package io.aktivator; | |
import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder; | |
import org.keycloak.admin.client.Keycloak; | |
import org.keycloak.admin.client.KeycloakBuilder; | |
import org.keycloak.admin.client.resource.RealmResource; | |
import org.keycloak.admin.client.resource.RolesResource; | |
import org.keycloak.admin.client.resource.UsersResource; | |
import org.keycloak.representations.AccessTokenResponse; | |
import org.keycloak.representations.idm.ClientRepresentation; | |
import org.keycloak.representations.idm.CredentialRepresentation; | |
import org.keycloak.representations.idm.RoleRepresentation; | |
import org.keycloak.representations.idm.UserRepresentation; | |
import org.springframework.beans.factory.annotation.Autowired; | |
import org.springframework.beans.factory.annotation.Value; | |
import org.springframework.context.annotation.Scope; | |
import org.springframework.stereotype.Component; | |
import javax.ws.rs.core.Response; | |
import java.util.Arrays; | |
import java.util.Collections; | |
import java.util.List; | |
import java.util.Random; | |
import static org.assertj.core.api.AssertionsForClassTypes.assertThat; | |
@Component | |
@Scope("singleton") | |
public class KeycloakClientTest { | |
private final String realm; | |
private final String client; | |
private AccessTokenResponse accessToken; | |
private final Keycloak keycloak; | |
@Autowired | |
public WebClientToken(@Value("${keycloak.auth-server-url}") String serverUrl, | |
@Value("${keycloak.realm}") String realm, | |
@Value("${aktivator.keycloak.resource-web-test}") String client, | |
@Value("${aktivator.keycloak.credentials.secret-web-test}") String secret, | |
@Value("${aktivator.keycloak.user}") String keycloakUser, | |
@Value("${aktivator.keycloak.password}") String keycloakPassword) { | |
this.realm = realm; | |
this.client = client; | |
keycloak = KeycloakBuilder.builder() | |
.serverUrl(serverUrl) | |
.realm(realm) | |
.username(keycloakUser) | |
.password(keycloakPassword) | |
.clientId(client) | |
.clientSecret(secret) | |
.resteasyClient(new ResteasyClientBuilder().connectionPoolSize(20).build()) | |
.build(); | |
accessToken = keycloak.tokenManager().getAccessToken(); | |
} | |
void createUser() { | |
UserRepresentation user = new UserRepresentation(); | |
user.setEnabled(true); | |
user.setUsername("tester14"); | |
user.setFirstName("First"); | |
user.setLastName("Last"); | |
user.setEmail("[email protected]"); | |
user.setAttributes(Collections.singletonMap("origin", Arrays.asList("demo"))); | |
// Get realm | |
RealmResource realmResource = keycloak.realm(realm); | |
UsersResource userResource = realmResource.users(); | |
// Create user (requires manage-users role) | |
Response response = userResource.create(user); | |
assertThat(response.getStatusInfo().getReasonPhrase()).isEqualTo("Created"); | |
String userId = response.getLocation().getPath().replaceAll(".*/([^/]+)$", "$1"); | |
RoleRepresentation testerRealmRole = realmResource.roles().get("activist").toRepresentation(); | |
System.out.printf("User created with userId: %s%n", userId); | |
userResource.get(userId).roles().realmLevel().add(Collections.singletonList(testerRealmRole)); | |
// Get client | |
ClientRepresentation app1Client = realmResource.clients().findByClientId(client).get(0); | |
// Get client level role (requires view-clients role) | |
RolesResource roles = realmResource.roles(); | |
RoleRepresentation userClientRole = roles.get("activist").toRepresentation(); | |
// Assign client level role to user | |
userResource.get(userId).roles().realmLevel().add(Collections.singletonList(userClientRole)); | |
userResource.get(userId).remove(); | |
} | |
public String getValue() { | |
return accessToken.getToken(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment