首页 > 解决方案 > 如何在 Kubernetes 上的 Quarkus 中设置与 Keycloak 的 OIDC 连接

问题描述

有人在 Kubernetes 集群中部署的 Quarkus 应用程序中成功建立了与 Keycloack 的 OIDC 连接吗?您能否澄清connection-delay(和其他相关参数)如何工作?(这是我试图遵循的文档)

在我们的环境中(Quarkus 1.13.3.Final,Keycloak 12.0.4)我们有这样的配置:

quarkus.oidc.connection-delay: 6M
quarkus.oidc.connection-timeout: 30S
quarkus.oidc.tenant-id: testTenant-01

当 Pod 启动时,这些消息会出现在 Pod 的日志中:

2021-07-26 14:44:22,523 INFO [main] [OidcRecorder.java:264] - 每 2 秒连接到 IDP 最多 180 次
2021-07-26 14:44:24,142 调试 [vert.x-eventloop -thread-1] [OidcRecorder.java:115] - 'testTenant-01' 租户初始化失败:'OpenId Connect Provider 配置元数据未配置,无法被发现'。访问受此租户保护的资源将失败并出现 HTTP 401。

(...以下日志稍后会在 pod 运行时出现...)

2021-07-27 06:11:54,261 调试 [vert.x-eventloop-thread-0] [DefaultTenantConfigResolver.java:112] - 租户“null”未初始化
2021-07-27 06:11:54,262 错误 [vert.x-eventloop-thread-0] [QuarkusErrorHandler.java:101] - 对 /q/health/live 的 HTTP 请求失败,错误 ID:89f83d1d-894c-4fed- 9995-0d42d60cec17-2:io.quarkus.oidc.OIDCException:在 io.quarkus.oidc.runtime.OidcAuthenticationMechanism 的 io.quarkus.oidc.runtime.OidcAuthenticationMechanism.resolve(OidcAuthenticationMechanism.java:61) 处未解决租户配置。在 io.quarkus.oidc.runtime.OidcAuthenticationMechanism_ClientProxy.authenticate(OidcAuthenticationMechanism_ClientProxy.zig:189) 在 io.quarkus.vertx.http.runtime.security.HttpAuthenticator.attemptAuthentication(HttpAuthenticator.java:100) 进行身份验证(OidcAuthenticationMechanism.java:40)在 io.quarkus.vertx.http.runtime.security.HttpAuthenticator_ClientProxy.attemptAuthentication(HttpAuthenticator_ClientProxy.zig:157) 在 io.quarkus.vertx.http。runtime.security.HttpSecurityRecorder$2.handle(HttpSecurityRecorder.java:101) 在 io.quarkus.vertx.http.runtime.security.HttpSecurityRecorder$2.handle(HttpSecurityRecorder.java:51) 在 io.vertx.ext.web.impl。 RouteState.handleContext(RouteState.java:1038)

问题:

  1. 任何方式如何找出哪些元数据丢失?
  2. 我可以以某种方式更改连接尝试之间的 2s 时间吗?
  3. 连接延迟和连接超时之间有什么关系吗?
  4. 它在 cca 2s 后失败 - 这是否意味着它在第一次尝试时立即失败,或者它是否如此快地完成了 180 次尝试?
  5. 是否DefaultTenantConfigResolver从不同于OidcRecorder初始化的资源中获取租户,即是否应该在多个地方配置租户?

标签: javakuberneteskeycloakopenid-connectquarkus

解决方案


终于让它工作了。由不正确的 auth-server-url 引起,从日志消息中根本不清楚

quarkus.oidc.client-id: my-app
quarkus.oidc.enabled: true
quarkus.oidc.connection-delay: 6M
quarkus.oidc.connection-timeout: 30S
quarkus.oidc.tenant-id: testTenant-01
quarkus.oidc.auth-server-url: ${keycloak.url}/auth/realms/${quarkus.oidc.tenant-id}

Quarkus 文档中强调了 URL 格式:请注意,如果您使用 Keycloak OIDC 服务器,请确保基本 URL 采用以下格式: https://host:port/auth/realms/{realm} 其中 {realm} 必须替换为 Keycloak 领域的名称


推荐阅读