4.4. Keycloak 集成
您可以使用 Keycloak 保护 Red Hat Buld of HawtIO 控制台。要将 Red Hat Buld of HawtIO 与 Keycloak 集成,您需要:
- 准备 Keycloak 服务器
- 将 Red Hat buuld of 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
在这里,我们为 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 角色,如 admin 和 viewer。这些角色的名称与 HawtIO 角色的默认 Red Hat buuld 相同,该角色可以登录 Red Hat buuld of HawtIO 管理控制台和 JMX。
另外,还有 3 个用户:
admin-
用户 用户,具有密码
和角色 admin,允许登录 Red Hat Buld of HawtIO。admin viewer-
用户 用户,具有密码
和角色查看器,允许登录 Red Hat Buld of HawtIO。查看器 jdoe-
用户没有分配
密码,没有分配角色,不允许登录 Red Hat buuld of HawtIO。
目前,角色的不同不会影响 Quarkus 和 Spring Boot 上的 HawtIO 访问权限,因为 Red Hat buuld of HawtIO RBAC 功能还没有在这些运行时实施。
4.4.2. 配置 复制链接链接已复制到粘贴板!
Red Hat buuld of HawtIO 配置由两个部分组成:与运行时中的 Keycloak 集成(服务器侧),并在 Red Hat buuld of HawtIO 控制台(客户端一侧)中与 Keycloak 集成集成。
每个部分都需要进行以下设置:
- 服务器端
- Keycloak 适配器的特定于运行时的配置
- 客户端
-
Red Hat buuld of HawtIO Keycloak configuration
keycloak-hawtio.json
4.4.2.1. Quarkus 复制链接链接已复制到粘贴板!
首先,应用所需的配置, 以将 Red Hat buuld of HawtIO 附加到 Quarkus 应用程序。
您需要将 Quarkus 应用程序与 Keycloak 集成为 Quarkus OIDC 扩展。将以下依赖项添加到 pom.xml 中:
pom.xml
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-oidc</artifactId>
</dependency>
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
quarkus.oidc.token-state-manager.split-tokens = true 非常重要,因为您可能会遇到大量大小会话 Cookie 令牌问题,且无法与 Keycloak 集成。
4.4.2.1.2. 客户端 复制链接链接已复制到粘贴板!
最后,在 Quarkus 应用程序项目中的 src/main/resources 下创建 keycloak-hawtio.json (充当 Red Hat buuld of HawtIO JS 配置):
keycloak-hawtio.json
{
"realm": "hawtio-demo",
"clientId": "hawtio-client",
"url": "http://localhost:18080/",
"jaas": false,
"pkceMethod": "S256"
}
根据代码 交换代码挑战方法高级配置,将 pkceMethod 设置为 S256。如果没有启用 PKCE,请不要设置这个选项。
构建并运行项目,它将与 Keycloak 集成。
4.4.2.1.3. Example 复制链接链接已复制到粘贴板!
如需工作 示例,请参阅 quarkus-keycloak 示例。
4.4.2.2. Spring Boot 复制链接链接已复制到粘贴板!
首先,应用所需的配置, 以将 Red Hat buuld of HawtIO 附加到 Spring Boot 应用程序。
您需要将 Spring Boot 应用程序与 Keycloak 集成的内容是,将以下依赖项添加到 pom.xml 中(将 4.x.y 替换为最新的 Red Hat buuld of HawtIO 发行版本):
pom.xml
<dependency>
<groupId>io.hawt</groupId>
<artifactId>hawtio-springboot-keycloak</artifactId>
<version>4.x.y</version>
</dependency>
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
4.4.2.2.2. 客户端 复制链接链接已复制到粘贴板!
最后,在 Spring Boot 项目中的 src/main/resources 下创建 keycloak-hawtio.json (充当 Red Hat buuld of HawtIO JS 配置):
keycloak-hawtio.json
{
"realm": "hawtio-demo",
"clientId": "hawtio-client",
"url": "http://localhost:18080/",
"jaas": false
}
构建并运行项目,它将与 Keycloak 集成。
4.4.2.2.3. Example 复制链接链接已复制到粘贴板!
有关工作 示例,请参阅 springboot-keycloak 示例。