Keycloak-SpringBoot Adapter启用策略强制器后如何配置暴露Actuator端点
问题:启用Keycloak策略强制器后,Spring Boot Actuator路径返回403,如何通过Keycloak平台配置暴露?
环境信息
- Spring Boot 2.6.2
- Spring Boot Actuator
- Keycloak 16.1.0
POM依赖配置
<dependencies> <dependency> <groupId>org.keycloak</groupId> <artifactId>keycloak-spring-boot-starter</artifactId> <version>16.1.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.keycloak.bom</groupId> <artifactId>keycloak-adapter-bom</artifactId> <version>16.1.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
application.properties配置
keycloak.realm=mt-developer keycloak.resource=test keycloak.auth-server-url=http://local.host:8080/auth/ keycloak.credentials.secret=ZMRQ0OPiXZFONCpdNO0G7zLnq5IDIcvM keycloak.ssl-required=external keycloak.use-resource-role-mappings=false keycloak.bearer-only=false keycloak.autodetect-bearer-only=true keycloak.security-constraints[0].authRoles[0]=user keycloak.security-constraints[0].securityCollections[0].name=all keycloak.security-constraints[0].securityCollections[0].patterns[0]=/* keycloak.security-constraints[1].securityCollections[0].patterns[0]=/actuator keycloak.security-constraints[1].securityCollections[0].patterns[1]=/actuator/* keycloak.enabled=true keycloak.cors=true management.endpoints.web.exposure.include=* logging.level.root=DEBUG # 新增配置导致问题 keycloak.policy-enforcer-config.lazy-load-paths=true
问题描述
原本配置可正常暴露/actuator及所有/actuator/*路径,添加keycloak.policy-enforcer-config.lazy-load-paths=true启用策略强制器后,本地security-constraints配置失效,请求/actuator路径返回403状态码。请问能否通过Keycloak平台的设置来暴露该路径?
解决方案
可以通过Keycloak控制台配置授权策略实现,启用策略强制器后,本地的security-constraints会被Keycloak端的授权规则覆盖,具体步骤如下:
- 登录Keycloak控制台,进入目标Realm(
mt-developer) - 定位目标客户端:在「Clients」列表中选择
test客户端,切换到「Authorization」标签页 - 配置Actuator资源:
- 点击「Resources」选项卡,点击「Create」按钮
- 填写资源名称(如
Actuator Endpoints),在「URIs」中添加/actuator/**(通配符匹配所有Actuator子路径),保持其他默认配置后保存
- 创建访问权限规则:
- 点击「Permissions」选项卡,选择「Create Permission」→「Resource-Based Permission」
- 选择刚创建的
Actuator Endpoints资源,填写权限名称(如Allow Actuator Access) - 切换到「Policies」标签页,点击「Add Policy」→「Role Policy」
- 填写策略名称(如
User Role Access Policy),在「Roles」中选择user角色,保存策略 - 回到权限配置页面,关联刚才创建的
User Role Access Policy,完成权限保存
- 验证配置:重启Spring Boot应用,使用拥有
user角色的用户访问/actuator路径,此时应能正常访问
注意:启用策略强制器后,本地security-constraints配置不再生效,所有授权逻辑由Keycloak端管控,需确保Keycloak中的权限配置覆盖所有需要开放的路径。
内容的提问来源于stack exchange,提问作者Mike6
相关产品推荐
相关产品推荐

