尝试从 quarkus 连接到 keycloak 时出错

Error trying to connect from quarkus to keycloak

启动 quarkus 服务 (v2.1.1) 并尝试连接到 keycloak 实例 (v15.0.1) 时,我收到以下异常堆栈跟踪:

ERROR [io.qua.run.Application] (Quarkus Main Thread) Failed to start application (with profile dev): io.quarkus.oidc.common.runtime.OidcEndpointAccessException
    at io.quarkus.oidc.runtime.OidcProviderClient.getJsonWebKeySet(OidcProviderClient.java:75)
    at io.quarkus.oidc.runtime.OidcProviderClient.lambda$getJsonWebKeySet[=10=](OidcProviderClient.java:54)
    at io.smallrye.context.impl.wrappers.SlowContextualFunction.apply(SlowContextualFunction.java:21)
    at io.smallrye.mutiny.operators.uni.UniOnItemTransform$UniOnItemTransformProcessor.onItem(UniOnItemTransform.java:36)
    at io.smallrye.mutiny.vertx.AsyncResultUni.lambda$subscribe(AsyncResultUni.java:35)
    at io.vertx.mutiny.ext.web.client.HttpRequest.handle(HttpRequest.java:717)
    at io.vertx.mutiny.ext.web.client.HttpRequest.handle(HttpRequest.java:714)
    at io.vertx.ext.web.client.impl.HttpContext.handleDispatchResponse(HttpContext.java:371)
    at io.vertx.ext.web.client.impl.HttpContext.execute(HttpContext.java:358)
    at io.vertx.ext.web.client.impl.HttpContext.next(HttpContext.java:336)
    at io.vertx.ext.web.client.impl.HttpContext.fire(HttpContext.java:303)
    at io.vertx.ext.web.client.impl.HttpContext.dispatchResponse(HttpContext.java:265)
    at io.vertx.ext.web.client.impl.HttpContext.lambda$null(HttpContext.java:520)
    at io.vertx.core.impl.AbstractContext.dispatch(AbstractContext.java:96)
    at io.vertx.core.impl.AbstractContext.dispatch(AbstractContext.java:59)
    at io.vertx.core.impl.EventLoopContext.lambda$runOnContext[=10=](EventLoopContext.java:37)
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164)
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:497)
    at io.netty.util.concurrent.SingleThreadEventExecutor.run(SingleThreadEventExecutor.java:989)
    at io.netty.util.internal.ThreadExecutorMap.run(ThreadExecutorMap.java:74)
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    at java.base/java.lang.Thread.run(Thread.java:832)

这是我设置的配置:

# OIDC Configuration
quarkus.oidc.auth-server-url=https://<HOST>/auth/realms/<REALM_NAME>
quarkus.oidc.client-id=<CLIENT_ID>
# quarkus.oidc.application-type=service
quarkus.oidc.credentials.secret=<SECRET>
quarkus.oidc.tls.verification=required

# Enable Policy Enforcement
quarkus.keycloak.policy-enforcer.enable=true

有人知道这里出了什么问题吗?

感谢上面的评论,我发现这里的 quarkus 配置很有用:

quarkus.log.min-level=DEBUG
quarkus.log.category."io.quarkus.oidc".level=DEBUG

这给了我这个错误:

Caused by: org.keycloak.authorization.client.util.HttpResponseException: Unexpected response from server: 400 / Bad Request / Response from server: {"error":"invalid_client","error_description":"Bearer-only not allowed"}

很明显,我在 keycloak 中错误配置了客户端。太糟糕了,默认情况下原始错误消息没有给我该信息。