4.4. Keycloak 集成


您可以使用 Keycloak 保护 HawtIO 控制台。要将 HawtIO 与 Keycloak 集成,您需要:

  1. 准备 Keycloak 服务器
  2. 将 HawtIO 部署到 favourite 运行时(Quarkus、Spring Boot、Wild、Jetty、Tomcat 等),并将它配置为使用 Keycloak 进行身份验证

4.4.1. 准备 Keycloak 服务器

安装并运行 Keycloak 服务器。最简单的方法是使用 Docker 镜像

docker run -d --name keycloak \
  -p 18080:8080 \
  -e KEYCLOAK_ADMIN=admin \
  -e KEYCLOAK_ADMIN_PASSWORD=admin \
  quay.io/keycloak/keycloak start-dev
Copy to Clipboard Toggle word wrap

在这里,我们为 Keycloak 服务器使用端口号 18080,以避免与其他应用程序可能使用的端口冲突。

您可以使用用户 admin / password admin 登录 Keycloak 管理控制台 http://localhost:18080/admin/。将 hawtio-demo-realm.json 导入到 Keycloak 中。为此,可单击 Create Realm 按钮,然后导入 hawtio-demo-realm.json。它将创建 hawtio-demo realm。

hawtio-demo 域具有 hawtio-client 应用程序作为公共客户端安装,并且定义了一些 realm 角色,如 adminviewer。这些角色的名称与默认的 HawtIO 角色相同,该角色可以登录 HawtIO 管理控制台和 JMX。

另外,还有 3 个用户:

admin
用户 用户,其密码为 admin 和 role admin,允许登录 HawtIO。
viewer
用户 用户,具有密码 查看器 和角色查看器,允许登录 HawtIO。
jdoe
用户( password password)和未分配任何角色,不允许该用户登录 HawtIO。
注意

目前,角色的不同不会影响 Quarkus 和 Spring Boot 上的 HawtIO 访问权限,因为 HawtIO RBAC 功能尚未在这些运行时实施。

4.4.2. 配置

HawtIO 的 Keycloak 集成配置由两个部分组成:与运行时中的 Keycloak 集成(服务器侧),并与 HawtIO 控制台中的 Keycloak 集成(客户端侧)。

每个部分都需要进行以下设置:

服务器端
Keycloak 适配器的特定于运行时的配置
客户端
HawtIO Keycloak 配置 keycloak-hawtio.json

4.4.2.1. Quarkus

首先,应用所需的配置, 以将 HawtIO 附加到 Quarkus 应用程序。

您需要将 Quarkus 应用程序与 Keycloak 集成为 Quarkus OIDC 扩展。将以下依赖项添加到 pom.xml 中:

pom.xml

<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-oidc</artifactId>
</dependency>
Copy to Clipboard Toggle word wrap

4.4.2.1.1. 服务器端

然后,在 application.properties 中添加以下行(配置服务器端 OIDC 扩展):

application.properties

quarkus.oidc.auth-server-url = http://localhost:18080/realms/hawtio-demo
quarkus.oidc.client-id = hawtio-client
quarkus.oidc.credentials.secret = secret
quarkus.oidc.application-type = web-app
quarkus.oidc.token-state-manager.split-tokens = true
quarkus.http.auth.permission.authenticated.paths = "/*"
quarkus.http.auth.permission.authenticated.policy = authenticated
Copy to Clipboard Toggle word wrap

重要

quarkus.oidc.token-state-manager.split-tokens = true 非常重要,因为您可能会遇到大量大小会话 Cookie 令牌问题,且无法与 Keycloak 集成。

4.4.2.1.2. 客户端

最后,在 Quarkus 应用程序项目中的 src/main/resources 下创建 keycloak-hawtio.json (充当 client-side HawtIO JS 配置):

keycloak-hawtio.json

{
  "realm": "hawtio-demo",
  "clientId": "hawtio-client",
  "url": "http://localhost:18080/",
  "jaas": false,
  "pkceMethod": "S256"
}
Copy to Clipboard Toggle word wrap

注意

根据代码 交换代码挑战方法高级配置,将 pkceMethod 设置为 S256。如果没有启用 PKCE,请不要设置这个选项。

构建并运行项目,它将与 Keycloak 集成。

4.4.2.1.3. Example

如需工作 示例,请参阅 quarkus-keycloak 示例。

4.4.2.2. Spring Boot

首先,应用所需的配置, 以将 HawtIO 附加到 Spring Boot 应用程序。

您需要将 Spring Boot 应用程序与 Keycloak 集成的内容是,将以下依赖项添加到 pom.xml 中(将 4.x.y 替换为最新的 HawtIO 发行版本):

pom.xml

<dependency>
  <groupId>io.hawt</groupId>
  <artifactId>hawtio-springboot-keycloak</artifactId>
  <version>4.x.y</version>
</dependency>
Copy to Clipboard Toggle word wrap

4.4.2.2.1. 服务器端

然后,在 application.properties 中添加以下行(配置服务器端 Keycloak 适配器):

application.properties

keycloak.realm = hawtio-demo
keycloak.resource = hawtio-client
keycloak.auth-server-url = http://localhost:18080/
keycloak.ssl-required = external
keycloak.public-client = true
keycloak.principal-attribute = preferred_username
Copy to Clipboard Toggle word wrap

4.4.2.2.2. 客户端

最后,在 Spring Boot 项目中的 src/main/resources 下创建 keycloak-hawtio.json (充当 client-side HawtIO JS 配置):

keycloak-hawtio.json

{
  "realm": "hawtio-demo",
  "clientId": "hawtio-client",
  "url": "http://localhost:18080/",
  "jaas": false
}
Copy to Clipboard Toggle word wrap

构建并运行项目,它将与 Keycloak 集成。

4.4.2.2.3. Example

有关工作 示例,请参阅 springboot-keycloak 示例。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat