【问题标题】:User creation with keycloak使用 keycloak 创建用户
【发布时间】:2021-07-01 15:23:33
【问题描述】:

我正在尝试在 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;
  }

【问题讨论】:

  • 您能否添加相关代码来引发您的问题?您创建 userRepresenation 的部分
  • 响应响应 = keycloak.realm(keycloakProperties.getRealm()).users().create(userRepresentation); log.info("响应码 {}", response.getStatus()); // 如果我设置了 userRepresentation.setCredentials(Arrays.asList(createPasswordCredentials(userModel.getPassword()))),则返回 400;
  • 错误可能在于您如何填写userRepresentation。您能否编辑您的问题并添加有关如何创建和填充此变量的完整代码(以及您的 CredentialRepresentation 的代码,否则真的很难提供帮助
  • :-( 我完全尝试了您的代码(纯 java,不是在 spring 中)并收到 201 响应(设置密码的新用户),同样使用 KC 12.0.4
  • 我使用了来自org.keycloak的keycloak-admin-client:12.0.4,并导入了org.keycloak.admin.client.Keycloak

标签: spring spring-boot keycloak keycloak-rest-api keycloak-admin-cli


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2020-04-17
    • 2019-12-27
    • 2019-05-05
    • 2017-05-01
    • 2019-05-17
    • 2020-11-07
    • 2022-06-29
    • 2021-03-06
    • 2021-06-21
    相关资源
    最近更新 更多