通过keycloak管理客户端在keycloak中创建用户returns 400
Create user in keycloak through keycloak admin client returns 400
我想通过 keycloak 管理客户端创建一个用户,但我得到的是 400 状态。
- 我无法激活 keycloak 客户端的任何日志,所以我不知道它执行的 http 调用。
- 我已经成功通过邮递员创建了一个用户。
- 搜索并获取用户作品(见下文)
你看到我的代码有什么错误吗?
Keycloak keycloak = Keycloak.getInstance(keycloakUrl,"master",
keycloakAdminUsername, keycloakAdminPassword,
keycloakAdminClient);
UserRepresentation user = new UserRepresentation();
user.setUsername("username");
user.setFirstName("firstname");
user.setEmail("kjhkjh@gmail.com");
user.setRequiredActions(Collections.<String>emptyList());
user.setEnabled(true);
Response response = keycloak.realm(realm).users().create(user);
if (response.getStatus() != 201) {
log.error("Couldn't create user, status:{}", response.getStatus());
} else {
log.info("User# created", user.getUsername());
log.info("Keycloak response status: {}",
response.getStatus());
}
Couldn't create user, status:400
问题是,如果我尝试让用户使用相同的 keycloak 实例,它会起作用。
UserResource userX = keycloak.realm(realm).users().get("8c1d29fd-8d6b-4dea-817f-3fc1421096f0");
log.debug(userX.toRepresentation().getUsername());
相同,如果我使用搜索
log.debug("Getting users from keycloak");
List<UserRepresentation> users = keycloak.realm(realm).users().search(username, 0, 10);
users.forEach(user -> log.info("username: {}", user.getUsername()));
好吧,我找到了解决方案,在我看来有点愚蠢。客户端需要与 keycloak 服务器版本相同。例如,在我的例子中,我得到了 2.0.0.Final 版本的 keycloak 管理客户端,因为 keycloak 服务器是 2.0.0。据我所知,这都是关于 UserRepresentation class 的。
我想通过 keycloak 管理客户端创建一个用户,但我得到的是 400 状态。
- 我无法激活 keycloak 客户端的任何日志,所以我不知道它执行的 http 调用。
- 我已经成功通过邮递员创建了一个用户。
- 搜索并获取用户作品(见下文)
你看到我的代码有什么错误吗?
Keycloak keycloak = Keycloak.getInstance(keycloakUrl,"master",
keycloakAdminUsername, keycloakAdminPassword,
keycloakAdminClient);
UserRepresentation user = new UserRepresentation();
user.setUsername("username");
user.setFirstName("firstname");
user.setEmail("kjhkjh@gmail.com");
user.setRequiredActions(Collections.<String>emptyList());
user.setEnabled(true);
Response response = keycloak.realm(realm).users().create(user);
if (response.getStatus() != 201) {
log.error("Couldn't create user, status:{}", response.getStatus());
} else {
log.info("User# created", user.getUsername());
log.info("Keycloak response status: {}",
response.getStatus());
}
Couldn't create user, status:400
问题是,如果我尝试让用户使用相同的 keycloak 实例,它会起作用。
UserResource userX = keycloak.realm(realm).users().get("8c1d29fd-8d6b-4dea-817f-3fc1421096f0");
log.debug(userX.toRepresentation().getUsername());
相同,如果我使用搜索
log.debug("Getting users from keycloak");
List<UserRepresentation> users = keycloak.realm(realm).users().search(username, 0, 10);
users.forEach(user -> log.info("username: {}", user.getUsername()));
好吧,我找到了解决方案,在我看来有点愚蠢。客户端需要与 keycloak 服务器版本相同。例如,在我的例子中,我得到了 2.0.0.Final 版本的 keycloak 管理客户端,因为 keycloak 服务器是 2.0.0。据我所知,这都是关于 UserRepresentation class 的。