Я пытаюсь создать пользователя с конечной точкой keycloak / users в проекте весенней загрузки. Вот шаги, которым я следовал Сначала создал администратора в главной области и клиента admin-cli. Используется для получения экземпляра keycloak для дальнейших операций.
return Keycloak.getInstance(
keycloakProperties.getAuthServerUrl(),
"master",
adminConfig.getUserName(),
adminConfig.getPassword(),
"admin-cli");
Я могу создать пользователя, если не добавлю клиентское представление в user. Если я добавлю CredentialRepresentation внутри объекта userRepresentation, я получаю ошибку BadRequest (код 400) без каких-либо подробностей. Я просмотрел журналы сервера keycloak, которые тоже не помогли. В качестве попытки я сначала создал пользователя, а позже сбросил пароль, а затем также создал пользователя, но не смог установить пароль с конечной точкой сброса пароля (та же ошибка). Как упоминалось в документах, я установил для свойства enabled userRepresentation значение правда. Версия Keycloak: 12.0.4, версия загрузки Spring: 2.1.6.RELEASE Я попытался прочитать сущность из полученного ответа, но мне это тоже не удалось. Любая помощь в решении проблемы будет оценена по достоинству. // Код для создания пользователя
UserRepresentation userRepresentation = new UserRepresentation();
userRepresentation.setUsername(userModel.getEmail());
userRepresentation.setEmail(userModel.getEmail());
userRepresentation.setCredentials(Arrays.asList(createPasswordCredentials(userModel.getPassword())));
userRepresentation.setEnabled(true);
Keycloak keycloak = getKeycloakInstance(keycloakProperties);
Response response = keycloak.realm(keycloakProperties.getRealm()).users().create(userRepresentation);
log.info("Response Code {}", response.getStatus());
Код для представления учетных данных:
private static CredentialRepresentation createPasswordCredentials(String password) {
CredentialRepresentation passwordCredentials = new CredentialRepresentation();
passwordCredentials.setTemporary(false);
passwordCredentials.setType(CredentialRepresentation.PASSWORD);
passwordCredentials.setValue(password);
return passwordCredentials;
}
Ответ response = keycloak.realm (keycloakProperties.getRealm ()). Users (). Create (userRepresentation) ; log.info ("Код ответа {}", response.getStatus ()); // возвращает 400, если я установил userRepresentation.setCredentials (Arrays.asList (createPasswo rdCredentials (userMo del.getPassword ()))) ;
Ошибка скорее всего в том, как вы заливаете userRepresentation
. Можете ли вы отредактировать свой вопрос и добавить полный код того, как эта переменная создается и заполняется (а также код для вашего CredentialRepresentation
, иначе очень сложно помочь
Отредактировал вопрос.
:-( Я попробовал именно ваш код (простой java, а не весной) и получил ответ 201 (новый пользователь с установленным паролем), также с KC 12.0.4
@Evil_skunk для Keycloak.getInstance, какой импорт вы использовали?
Я использовал keycloak-admin-client
: 12.0.4 из org.keycloak и импортировал org.keycloak.admin.client.Keycloak
Не могли бы вы поделиться кодом, как получить экземпляр keyclock? Я просматривал документацию несколько раз, но не мог понять проблему, мой пользователь имеет роль администратора для управления пользователями
@Mittal, за какой документацией вы следите, можете дать ссылку на нее, пожалуйста
@Mittal добавил сюда мой (рабочий) тестовый код pastebin.com/HhDFrXb5
Похоже, никакой разницы, я потратил много ошибок, чтобы понять это. @dreamcrash Я просто следил за официальной документацией и некоторыми статьями keycloak.org/docs/latest/securing_apps/index.htmlioansurariu.ro/2020/10/19/…
Я просто хочу обновить реальную причину этой проблемы. Сервер, который я использовал, был старой версии, и проблема была устранена при тестировании на последнем сервере Keycloak. Спасибо за поддержку, ребята :)
Можете ли вы добавить соответствующий код, который вызывает ошибку? часть, в которой вы создаете репрезентацию пользователя