【问题标题】:KeyCloak - Create Realms/Users/Groups Programmatically?KeyCloak - 以编程方式创建领域/用户/组?
【发布时间】:2019-01-02 10:53:14
【问题描述】:
我们决定将身份和访问管理解决方案转移到 KeyCloak,而不是完全在我们的 Java EE Web 应用程序中实施。我们正在创建一个多租户解决方案,并且更愿意通过我们的工作流程以编程方式创建安全领域/用户/组,而不是利用 KeyCloak 的自助注册功能或 Web UI,以便我们可以执行诸如获取信用卡详细信息以进行付款之类的操作等。我知道我们可能会利用admin REST APIs 来完成此任务,但我不确定除了手动编码 REST 调用之外是否还有更简单的方法。 KeyCloak 是否提供我们可以使用的管理客户端库?还是我们自己为管理 API 实现了一个 REST 客户端?
【问题讨论】:
标签:
java
rest
jakarta-ee
keycloak
keycloak-services
【解决方案2】:
Keycloak kc = KeycloakBuilder.builder()
.serverUrl("https://localhost:8443/auth")
.realm("master")
.username("admin")
.password("admin")
.clientId("Mycli")
.resteasyClient(new ResteasyClientBuilder().connectionPoolSize(10).build())
.build();
CredentialRepresentation credential = new CredentialRepresentation();
credential.setType(CredentialRepresentation.PASSWORD);
credential.setValue("test123");
UserRepresentation user = new UserRepresentation();
user.setUsername("testuser2");
user.setFirstName("Test2");
user.setLastName("User2");
user.setEmail("aaa@bbb.com");
user.setCredentials(Arrays.asList(credential));
user.setEnabled(true);
user.setRealmRoles(Arrays.asList("admin"));
// Create testuser
Response result = kc.realm("my-realem").users().create(user);
if (result.getStatus() != 201) {
System.err.println("Couldn't create user.");
System.exit(0);
}else{
System.out.println("Testuser created.... verify in keycloak!");
}
【解决方案4】:
您可以使用 Keycloak Java admin REST api 客户端执行此操作:
-
为您的项目添加依赖项:
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-admin-client</artifactId>
<version>15.0.2</version>
</dependency>
implementation 'org.keycloak:keycloak-admin-client:15.0.2'
-
使用KeycloakBuilder 创建Keycloak 的实例,使用管理员用户和默认admin-cli 客户端的密码身份验证:
Keycloak keycloak = KeycloakBuilder.builder()
.serverUrl("http://localhost:8081/auth")
.realm("master")
.clientId("admin-cli")
.username("admin")
.password("admin")
.build();
- 要创建新领域,请使用
RealmRepresentation:
RealmRepresentation rr = new RealmRepresentation();
rr.setId("test-realm");
rr.setRealm("test-realm");
rr.setEnabled(true);
keycloak.realms().create(rr);
- 要创建新用户,请使用
UserRepresentation:
CredentialRepresentation credential = new CredentialRepresentation();
credential.setType(CredentialRepresentation.PASSWORD);
credential.setValue("1234");
UserRepresentation user = new UserRepresentation();
user.setUsername("test");
user.setFirstName("test");
user.setLastName("test");
user.setEmail("test@gmail.com");
user.setCredentials(Arrays.asList(credential));
user.setEnabled(true);
user.setRealmRoles(Arrays.asList("admin"));
keycloak.realm("test-realm").users().create(user);
- 要创建一个新组,请使用
GroupRepresentation:
GroupRepresentation groupRepresentation = new GroupRepresentation()
groupRepresentation.setName("group");
Response response = keycloak.realm("test-realm").groups().add(groupRepresentation);
请注意,在创建新的顶级组时,您不应传递组 id - 您可以在创建组后检索它。