API Keycloak createUser Java - PullRequest
       62

API Keycloak createUser Java

0 голосов
/ 03 июля 2018

Образец кода Java, который я использую:

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));

}

Ответ, который я получаю, когда запускаю код:

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]`

Некоторые мысли: Я добавил счетчик, чтобы определить, работает ли все соединение вообще. И кажется, что возвращенный счет верен. Поэтому я успешно подключаюсь к Keycloak, но что-то еще не получается, когда я пытаюсь создать пользователя.

Зависимости в моем 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>

Как я понял, эти зависимости также связаны:

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

Другая информация:

Keycloak Version Я использую: 3.2.0

API Keycloak можно найти здесь

Более подробную информацию о коде HTTP 409 можно найти здесь

Я был бы очень признателен за любую помощь или любое руководство. Примечание. Учетные данные и все переменные проверялись один раз, два раза, трижды и еще раз 10 раз. Я искал полный рабочий пример. Но большинство не в состоянии указать требуемые зависимости, и поэтому мой код не выполняется.

Примечание: я также использую Tomcat-8, и сейчас я углубляюсь в проблему. Я вижу, что есть, вероятно, некоторые специальные конфигурации для Tomcat8. Обратите внимание, что выход из системы аутентификации для моего веб-приложения уже работает должным образом.

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Я наконец получил его на работу. Вот решение для дальнейшего использования.

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);

Затем я обновляю userResource с дополнительной информацией.

0 голосов
/ 03 июля 2018

Статус http 409-конфликта дает подсказку.

Keycloak создает пользователей и обычно возвращает конфликт, если имя пользователя или адрес электронной почты используются повторно. Убедитесь, что создаваемый ресурс содержит другое имя пользователя и адрес электронной почты, отличные от уже зарегистрированных в области.

Простой метод проверки: - Войдите в консоль администратора - Перейдите в царство - Перейдите на вкладку пользователей - Введите имя пользователя и поиск или адрес электронной почты и поиск

...