Spring Boot 中的 Keycloak 管理客户端

Wal*_*lly 4 spring-boot keycloak

我\xe2\x80\x99m 在 Spring Boot 中使用 keycloak-admin-client 时遇到一些问题。

\n\n

如果我尝试使用此代码,我会收到 401(未经授权):

\n\n
public Keycloak getKeycloakInstance() {\n  var keycloak = KeycloakBuilder.builder()\n   .serverUrl(SERVER_URL)\n   .realm(REALM)\n   .username(USERNAME)\n   .password(PASSWORD)\n   .clientId(CLIENT_ID)\n   .build();\n  return keycloak;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

另外,如果我在上面的代码中放入.resteasyClient(....)and ,我会得到 badrequest 。.clientSecret(...)

\n\n

在客户端角色中,我创建了一个新的复合角色,并将所有领域管理角色赋予它,也许我配置有误?

\n\n

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

\n\n
<dependency>\n <groupId>org.keycloak</groupId>\n <artifactId>keycloak-admin-client</artifactId>\n <version>10.0.0</version>\n</dependency>\n
Run Code Online (Sandbox Code Playgroud)\n

Wal*_*lly 7

@zonaut在keycloak 讨论中回答了问题。也许它对某人有帮助!

“我个人会选择示例 2,在我们进行服务间通信时创建专用服务帐户客户端”。

示例 1 -> 使用用户

  1. 在您想要的领域下创建新客户端 -> keycloak-admin
  2. 选择仅启用直接访问授权的公共客户端
  3. 创建新角色,启用复合角色
    • 将领域管理类型输入到复合角色下的客户端角色中
    • 添加您需要的可用角色
  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");
Run Code Online (Sandbox Code Playgroud)

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

  1. 在您想要的领域下创建新客户端 -> keycloak-admin
  2. 选择仅启用服务帐户的机密客户端
  3. 选择选项卡服务帐户角色
    • 将领域管理类型键入客户端角色
    • 添加您需要的可用角色

代码:

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");
Run Code Online (Sandbox Code Playgroud)

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

您还可以使用具有密码授予的 admin 用户并使用现有的 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");
Run Code Online (Sandbox Code Playgroud)