首页 > 解决方案 > 使用 keycloak 创建用户

问题描述

我正在尝试在 spring boot 项目中使用 keycloak 的 /users 端点创建用户。这些是我遵循的步骤首先在主领域和 admin-cli 客户端中创建了一个管理员。用它来获取 keycloak 的实例以进行进一步的操作。

return Keycloak.getInstance(
            keycloakProperties.getAuthServerUrl(),
            "master",
            adminConfig.getUserName(),
            adminConfig.getPassword(),
            "admin-cli");

如果我不在用户中添加客户端表示,我可以创建用户。如果我在 userRepresentation 对象中添加 CredentialRepresentation,我会收到 BadRequest 错误(400 代码),没有任何详细信息。我查看了也没有用的 keycloak 服务器日志。作为尝试,我先创建用户并稍后重置密码,然后还创建了用户,但无法使用重置密码端点设置密码(同样的错误)。如文档中所述,我已将 userRepresentation 的启用属性设置为真的。Keycloak 版本:12.0.4,Spring Boot 版本: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());

CredentialRepresentation 代码:

private static CredentialRepresentation  createPasswordCredentials(String password) {
    CredentialRepresentation passwordCredentials = new CredentialRepresentation();
    passwordCredentials.setTemporary(false);
    passwordCredentials.setType(CredentialRepresentation.PASSWORD);
    passwordCredentials.setValue(password);
    return passwordCredentials;
  }

标签: springspring-bootkeycloakkeycloak-rest-apikeycloak-admin-cli

解决方案


我只是想更新这个问题背后的真正原因,我使用的服务器是旧版本的,并且在针对最新的 keycloak 服务器进行测试时问题得到了解决。谢谢小伙伴们的支持:)


推荐阅读