Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save enterprisesoftwaresolutions/71bd279f10ed4b006cc3bcbce77921e1 to your computer and use it in GitHub Desktop.

Select an option

Save enterprisesoftwaresolutions/71bd279f10ed4b006cc3bcbce77921e1 to your computer and use it in GitHub Desktop.

Revisions

  1. @thomasdarimont thomasdarimont revised this gist Mar 2, 2020. 1 changed file with 2 additions and 5 deletions.
    7 changes: 2 additions & 5 deletions pom.xml
    Original file line number Diff line number Diff line change
    @@ -2,14 +2,11 @@
    <project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
    <artifactId>keycloak-demos</artifactId>
    <groupId>com.github.thomasdarimont.keycloak</groupId>
    <version>1.0.0.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.github.thomasdarimont.keycloak</groupId>
    <artifactId>keycloak-admin-client-example</artifactId>
    <version>1.0.0.0-SNAPSHOT</version>

    <properties>
    <keycloak.version>8.0.2</keycloak.version>
  2. @thomasdarimont thomasdarimont revised this gist Mar 2, 2020. 1 changed file with 40 additions and 0 deletions.
    40 changes: 40 additions & 0 deletions pom.xml
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,40 @@
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
    <artifactId>keycloak-demos</artifactId>
    <groupId>com.github.thomasdarimont.keycloak</groupId>
    <version>1.0.0.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>keycloak-admin-client-example</artifactId>

    <properties>
    <keycloak.version>8.0.2</keycloak.version>
    <resteasy.version>3.9.1.Final</resteasy.version>
    </properties>


    <dependencies>

    <dependency>
    <artifactId>keycloak-admin-client</artifactId>
    <groupId>org.keycloak</groupId>
    <version>${keycloak.version}</version>
    </dependency>

    <dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-client</artifactId>
    <version>${resteasy.version}</version>
    </dependency>

    <dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jackson2-provider</artifactId>
    <version>${resteasy.version}</version>
    </dependency>
    </dependencies>
    </project>
  3. @thomasdarimont thomasdarimont revised this gist Feb 28, 2020. 1 changed file with 83 additions and 72 deletions.
    155 changes: 83 additions & 72 deletions KeycloakAdminClientExample.java
    Original file line number Diff line number Diff line change
    @@ -1,28 +1,30 @@
    package de.tdlabs.keycloak.client;

    import java.util.Arrays;
    import java.util.Collections;

    import javax.ws.rs.core.Response;
    package demo.plain;

    import org.keycloak.OAuth2Constants;
    import org.keycloak.admin.client.CreatedResponseUtil;
    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.UserResource;
    import org.keycloak.admin.client.resource.UsersResource;
    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 javax.ws.rs.core.Response;
    import java.util.Arrays;
    import java.util.Collections;

    public class KeycloakAdminClientExample {

    public static void main(String[] args) {
    public static void main(String[] args) {

    String serverUrl = "http://localhost:8080/auth";
    String realm = "demo";
    String clientId = "idm-client";
    String clientSecret = "a200cdf6-ad72-4f6c-af73-5b8e1cc48876";
    String serverUrl = "http://sso.tdlabs.local:8899/u/auth";
    String realm = "acme";
    // idm-client needs to allow "Direct Access Grants: Resource Owner Password Credentials Grant"
    String clientId = "idm-client";
    String clientSecret = "0d61686d-57fc-4048-b052-4ce74978c468";

    // // Client "idm-client" needs service-account with at least "manage-users, view-clients, view-realm, view-users" roles for "realm-management"
    // Keycloak keycloak = KeycloakBuilder.builder() //
    @@ -32,65 +34,74 @@ public static void main(String[] args) {
    // .clientId(clientId) //
    // .clientSecret(clientSecret).build();

    // User "idm-admin" needs at least "manage-users, view-clients, view-realm, view-users" roles for "realm-management"
    Keycloak keycloak = KeycloakBuilder.builder() //
    .serverUrl(serverUrl) //
    .realm(realm) //
    .grantType(OAuth2Constants.PASSWORD) //
    .clientId(clientId) //
    .clientSecret(clientSecret) //
    .username("idm-admin") //
    .password("admin") //
    .build();

    // Define user
    UserRepresentation user = new UserRepresentation();
    user.setEnabled(true);
    user.setUsername("tester1");
    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 userRessource = realmResource.users();

    // Create user (requires manage-users role)
    Response response = userRessource.create(user);
    System.out.println("Repsonse: " + response.getStatusInfo());
    System.out.println(response.getLocation());
    String userId = response.getLocation().getPath().replaceAll(".*/([^/]+)$", "$1");

    System.out.printf("User created with userId: %s%n", userId);

    // Get realm role "tester" (requires view-realm role)
    RoleRepresentation testerRealmRole = realmResource.roles()//
    .get("tester").toRepresentation();

    // Assign realm role tester to user
    userRessource.get(userId).roles().realmLevel() //
    .add(Arrays.asList(testerRealmRole));

    // Get client
    ClientRepresentation app1Client = realmResource.clients() //
    .findByClientId("app-javaee-petclinic").get(0);

    // Get client level role (requires view-clients role)
    RoleRepresentation userClientRole = realmResource.clients().get(app1Client.getId()) //
    .roles().get("user").toRepresentation();

    // Assign client level role to user
    userRessource.get(userId).roles() //
    .clientLevel(app1Client.getId()).add(Arrays.asList(userClientRole));

    // Define password credential
    CredentialRepresentation passwordCred = new CredentialRepresentation();
    passwordCred.setTemporary(false);
    passwordCred.setType(CredentialRepresentation.PASSWORD);
    passwordCred.setValue("test");

    // Set password credential
    userRessource.get(userId).resetPassword(passwordCred);
    }
    // User "idm-admin" needs at least "manage-users, view-clients, view-realm, view-users" roles for "realm-management"
    Keycloak keycloak = KeycloakBuilder.builder() //
    .serverUrl(serverUrl) //
    .realm(realm) //
    .grantType(OAuth2Constants.PASSWORD) //
    .clientId(clientId) //
    .clientSecret(clientSecret) //
    .username("idm-admin") //
    .password("admin") //
    .build();

    // Define user
    UserRepresentation user = new UserRepresentation();
    user.setEnabled(true);
    user.setUsername("tester1");
    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 usersRessource = realmResource.users();

    // Create user (requires manage-users role)
    Response response = usersRessource.create(user);
    System.out.printf("Repsonse: %s %s%n", response.getStatus(), response.getStatusInfo());
    System.out.println(response.getLocation());
    String userId = CreatedResponseUtil.getCreatedId(response);

    System.out.printf("User created with userId: %s%n", userId);

    // Define password credential
    CredentialRepresentation passwordCred = new CredentialRepresentation();
    passwordCred.setTemporary(false);
    passwordCred.setType(CredentialRepresentation.PASSWORD);
    passwordCred.setValue("test");

    UserResource userResource = usersRessource.get(userId);

    // Set password credential
    userResource.resetPassword(passwordCred);

    // // Get realm role "tester" (requires view-realm role)
    RoleRepresentation testerRealmRole = realmResource.roles()//
    .get("tester").toRepresentation();
    //
    // // Assign realm role tester to user
    userResource.roles().realmLevel() //
    .add(Arrays.asList(testerRealmRole));
    //
    // // Get client
    ClientRepresentation app1Client = realmResource.clients() //
    .findByClientId("app-frontend-springboot").get(0);
    //
    // // Get client level role (requires view-clients role)
    RoleRepresentation userClientRole = realmResource.clients().get(app1Client.getId()) //
    .roles().get("user").toRepresentation();
    //
    // // Assign client level role to user
    userResource.roles() //
    .clientLevel(app1Client.getId()).add(Arrays.asList(userClientRole));

    // Send password reset E-Mail
    // VERIFY_EMAIL, UPDATE_PROFILE, CONFIGURE_TOTP, UPDATE_PASSWORD, TERMS_AND_CONDITIONS
    // usersRessource.get(userId).executeActionsEmail(Arrays.asList("UPDATE_PASSWORD"));

    // Delete User
    // userResource.remove();
    }
    }
  4. @thomasdarimont thomasdarimont revised this gist Mar 27, 2017. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion KeycloakAdminClientExample.java
    Original file line number Diff line number Diff line change
    @@ -32,7 +32,7 @@ public static void main(String[] args) {
    // .clientId(clientId) //
    // .clientSecret(clientSecret).build();

    // User "javaland" needs at least "manage-users, view-clients, view-realm, view-users" roles for "realm-management"
    // User "idm-admin" needs at least "manage-users, view-clients, view-realm, view-users" roles for "realm-management"
    Keycloak keycloak = KeycloakBuilder.builder() //
    .serverUrl(serverUrl) //
    .realm(realm) //
  5. @thomasdarimont thomasdarimont created this gist Mar 27, 2017.
    96 changes: 96 additions & 0 deletions KeycloakAdminClientExample.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,96 @@
    package de.tdlabs.keycloak.client;

    import java.util.Arrays;
    import java.util.Collections;

    import javax.ws.rs.core.Response;

    import org.keycloak.OAuth2Constants;
    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.UsersResource;
    import org.keycloak.representations.idm.ClientRepresentation;
    import org.keycloak.representations.idm.CredentialRepresentation;
    import org.keycloak.representations.idm.RoleRepresentation;
    import org.keycloak.representations.idm.UserRepresentation;

    public class KeycloakAdminClientExample {

    public static void main(String[] args) {

    String serverUrl = "http://localhost:8080/auth";
    String realm = "demo";
    String clientId = "idm-client";
    String clientSecret = "a200cdf6-ad72-4f6c-af73-5b8e1cc48876";

    // // Client "idm-client" needs service-account with at least "manage-users, view-clients, view-realm, view-users" roles for "realm-management"
    // Keycloak keycloak = KeycloakBuilder.builder() //
    // .serverUrl(serverUrl) //
    // .realm(realm) //
    // .grantType(OAuth2Constants.CLIENT_CREDENTIALS) //
    // .clientId(clientId) //
    // .clientSecret(clientSecret).build();

    // User "javaland" needs at least "manage-users, view-clients, view-realm, view-users" roles for "realm-management"
    Keycloak keycloak = KeycloakBuilder.builder() //
    .serverUrl(serverUrl) //
    .realm(realm) //
    .grantType(OAuth2Constants.PASSWORD) //
    .clientId(clientId) //
    .clientSecret(clientSecret) //
    .username("idm-admin") //
    .password("admin") //
    .build();

    // Define user
    UserRepresentation user = new UserRepresentation();
    user.setEnabled(true);
    user.setUsername("tester1");
    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 userRessource = realmResource.users();

    // Create user (requires manage-users role)
    Response response = userRessource.create(user);
    System.out.println("Repsonse: " + response.getStatusInfo());
    System.out.println(response.getLocation());
    String userId = response.getLocation().getPath().replaceAll(".*/([^/]+)$", "$1");

    System.out.printf("User created with userId: %s%n", userId);

    // Get realm role "tester" (requires view-realm role)
    RoleRepresentation testerRealmRole = realmResource.roles()//
    .get("tester").toRepresentation();

    // Assign realm role tester to user
    userRessource.get(userId).roles().realmLevel() //
    .add(Arrays.asList(testerRealmRole));

    // Get client
    ClientRepresentation app1Client = realmResource.clients() //
    .findByClientId("app-javaee-petclinic").get(0);

    // Get client level role (requires view-clients role)
    RoleRepresentation userClientRole = realmResource.clients().get(app1Client.getId()) //
    .roles().get("user").toRepresentation();

    // Assign client level role to user
    userRessource.get(userId).roles() //
    .clientLevel(app1Client.getId()).add(Arrays.asList(userClientRole));

    // Define password credential
    CredentialRepresentation passwordCred = new CredentialRepresentation();
    passwordCred.setTemporary(false);
    passwordCred.setType(CredentialRepresentation.PASSWORD);
    passwordCred.setValue("test");

    // Set password credential
    userRessource.get(userId).resetPassword(passwordCred);
    }
    }