Spring Boot 中的 Keycloak 管理客户端

3

我在使用Spring Boot中的keycloak-admin-client时遇到了一些问题。

如果我尝试使用以下代码,就会出现401(未授权):

public Keycloak getKeycloakInstance() {
  var keycloak = KeycloakBuilder.builder()
   .serverUrl(SERVER_URL)
   .realm(REALM)
   .username(USERNAME)
   .password(PASSWORD)
   .clientId(CLIENT_ID)
   .build();
  return keycloak;
}

此外,如果我将.resteasyClient(....).clientSecret(...)放在上面的代码中,我会收到错误请求。

在客户端角色中,我创建了一个新的组合角色,并将所有realm-management角色都分配给它,也许我配置错了什么?

我在哪里可以找到有关如何使用此管理客户端依赖项的文档?

<dependency>
 <groupId>org.keycloak</groupId>
 <artifactId>keycloak-admin-client</artifactId>
 <version>10.0.0</version>
</dependency>
1个回答

6

问题在keycloak论坛中由@zonaut回答。也许能帮助到某些人!

"个人而言,我会选择示例2,创建一个专用的服务账户客户端,因为我们是服务对服务的通信。"

示例1 -> 使用用户

  1. 在所需领域下创建新客户端-> keycloak-admin
  2. 选择启用仅直接访问授权的公共客户端
  3. 创建新角色,启用复合角色
    • 在复合角色下将type realm-managment添加到客户端角色中
    • 添加您需要的可用角色
  4. 选择用户并打开角色映射选项卡
    • 在客户端角色中键入keycloak-admin并添加所需角色

代码:

    Keycloak keycloak = KeycloakBuilder.builder()
    .serverUrl("http://localhost:8080/auth")
    .grantType(OAuth2Constants.PASSWORD)
    .realm("realm-name")
    .clientId("keycloak-admin")
    .username("username")
    .password("password")
    .resteasyClient(
        new ResteasyClientBuilder()
            .connectionPoolSize(10).build()
    ).build();

keycloak.tokenManager().getAccessToken();
RealmResource realmResource = keycloak.realm("realm-name");

示例2 -> 使用机密的服务账户

  1. 在所需的领域下创建新的客户端 -> keycloak-admin。
  2. 选择只启用服务账户的机密客户端。
  3. 选择服务账户角色选项卡
    • 将“realm-management”类型输入到客户端角色中。
    • 添加您需要的可用角色。

代码:

Keycloak keycloak = KeycloakBuilder.builder()
    .serverUrl("http://localhost:8080/auth")
    .grantType(OAuth2Constants.CLIENT_CREDENTIALS)
    .realm("realm-name")
    .clientId("keycloak-admin")
    .clientSecret("1c7e2815-c4dc-401c-af2f-ebddad3b4a79")
    .resteasyClient(
        new ResteasyClientBuilder()
            .connectionPoolSize(10).build()
    ).build();

keycloak.tokenManager().getAccessToken();
RealmResource realmResource = keycloak.realm("realm-name");

示例3 -> 使用管理员账户

您也可以使用管理员用户和密码授权,使用现有的admin-cli客户端。

Keycloak keycloak = KeycloakBuilder.builder()
    .serverUrl("http://localhost:8080/auth")
    .grantType(OAuth2Constants.PASSWORD)
    .realm("master")
    .clientId("admin-cli")
    .username("admin")
    .password("password")
    .resteasyClient(
        new ResteasyClientBuilder()
            .connectionPoolSize(10).build()
    ).build();

keycloak.tokenManager().getAccessToken();
RealmResource realmResource = keycloak.realm("realm-name");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接