如何在Quarkus 2.13中降级Keycloak客户端至v18兼容旧服务器
如何在Quarkus 2.13中覆盖BOM的Keycloak版本至18.x?
针对你遇到的Quarkus 2.13 BOM默认使用Keycloak 19,导致与Keycloak 18服务器兼容性问题(客户端密钥无效)的情况,以下是可行的解决办法:
方法一:通过Maven DependencyManagement强制覆盖所有Keycloak依赖版本
Quarkus 2.13的BOM中,Keycloak依赖版本是通过PR#27387硬升级到19.0.2的,仅覆盖keycloak.version属性可能无法生效。你需要在pom.xml的dependencyManagement节点中显式声明所有Keycloak核心及客户端依赖的版本,强制Maven使用18.0.2:
<dependencyManagement> <dependencies> <!-- 覆盖Keycloak核心依赖 --> <dependency> <groupId>org.keycloak</groupId> <artifactId>keycloak-core</artifactId> <version>18.0.2</version> </dependency> <!-- 覆盖Keycloak适配器核心 --> <dependency> <groupId>org.keycloak</groupId> <artifactId>keycloak-adapter-core</artifactId> <version>18.0.2</version> </dependency> <!-- 覆盖Keycloak授权客户端 --> <dependency> <groupId>org.keycloak</groupId> <artifactId>keycloak-authz-client</artifactId> <version>18.0.2</version> </dependency> <!-- 覆盖Keycloak服务端依赖(若项目用到) --> <dependency> <groupId>org.keycloak</groupId> <artifactId>keycloak-services</artifactId> <version>18.0.2</version> </dependency> <!-- 按需添加其他用到的Keycloak模块 --> </dependencies> </dependencyManagement>
配置完成后,执行mvn dependency:tree检查依赖树,确认所有Keycloak相关依赖的版本均为18.0.2,无遗漏的19.x版本依赖。
方法二:排除Quarkus扩展中的Keycloak依赖,手动引入18.x版本
如果你尝试降级quarkus-keycloak-authorization扩展版本无效,可以排除该扩展自带的Keycloak依赖,再手动引入18.x版本的Keycloak客户端依赖:
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-keycloak-authorization</artifactId> <exclusions> <!-- 排除扩展中所有Keycloak依赖 --> <exclusion> <groupId>org.keycloak</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency> <!-- 手动引入Keycloak 18.x必要依赖 --> <dependency> <groupId>org.keycloak</groupId> <artifactId>keycloak-authz-client</artifactId> <version>18.0.2</version> </dependency> <dependency> <groupId>org.keycloak</groupId> <artifactId>keycloak-core</artifactId> <version>18.0.2</version> </dependency>
备选方案:修改客户端认证方法(不降级版本)
Keycloak 19默认调整了客户端认证方法,若不想降级客户端版本,可以尝试在application.properties中指定兼容Keycloak 18的认证方法:
# 针对Keycloak客户端认证 quarkus.keycloak.client.authentication-method=client_secret_basic # 针对授权客户端认证 quarkus.keycloak.authorization.client.authentication-method=client_secret_basic
注意:此方法仅解决认证方法差异导致的密钥无效问题,若存在其他API兼容性差异,仍可能出现其他错误,优先推荐前两种降级客户端版本的方案。
内容的提问来源于stack exchange,提问作者Vince Jerald Villamora
相关产品推荐
相关产品推荐

