我们有一个 WildFly 26 的工作设置,其中 HAL(管理控制台)通过 Keycloak 16 进行保护。
我们使用的是 KC 适配器,而不是 WF 原生 OIDC 适配器。
现在我们正在尝试将 KC 升级到 22,但 KC 放弃了对仅承载客户端的支持。
对管理接口的请求返回401状态码,WF上的日志如下:
DEBUG [org.keycloak.adapters.PreAuthActionsHandler] (management task-3) adminRequest http://localhost:9990/management
TRACE [org.keycloak.adapters.RequestAuthenticator] (management task-3) --> authenticate()
TRACE [org.keycloak.adapters.RequestAuthenticator] (management task-3) try bearer
DEBUG [org.keycloak.adapters.BearerTokenRequestAuthenticator] (management task-3) Authorization header not present
TRACE [org.keycloak.adapters.RequestAuthenticator] (management task-3) try query parameter auth
DEBUG [org.keycloak.adapters.QueryParameterTokenRequestAuthenticator] (management task-3) Token is not present in query
DEBUG [org.keycloak.adapters.RequestAuthenticator] (management task-3) NOT_ATTEMPTED: bearer only
发现一些有关弄乱客户端设置的主题,但所有测试都会导致相同的错误
有解决这个问题的线索吗?
谢谢!
问题是 KC 22 上的重大更改,KC 删除了已弃用的 Promise api:
您可以解决此问题,构建自定义 HAL 并在 WF 上更改它,或者构建自定义 KC。
我们的选择是构建一个自定义 KC,因为它只是 1 点更改。我们在 keycloak.js 上添加了已删除的 Promise api:
这就是需要恢复的:
function Keycloak (config) {
/*...*/
p.promise.success = function(callback) {
this.then(function handleSuccess(value) {
callback(value);
});
return this;
}
p.promise.error = function(callback) {
this.catch(function handleError(error) {
callback(error);
});
return this;
}
/*...*/
}