【问题标题】:How to set up OIDC connection to Keycloak in Quarkus on Kubernetes如何在 Kubernetes 上的 Quarkus 中设置与 Keycloak 的 OIDC 连接
【发布时间】:2021-10-02 13:03:21
【问题描述】:

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

在我们的环境中(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 启动时出现在它的日志中:

2021-07-26 14:44:22,523 信息 [主要] [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] - HTTP 对 /q/health/live 的请求失败,错误 ID: 89f83d1d-894c-4fed-9995-0d42d60cec17-2:io.quarkus.oidc.OIDCException: 租户配置尚未解决 io.quarkus.oidc.runtime.OidcAuthenticationMechanism.resolve(OidcAuthenticationMechanism.java:61) 在 io.quarkus.oidc.runtime.OidcAuthenticationMechanism.authenticate(OidcAuthenticationMechanism.java:40) 在 io.quarkus.oidc.runtime.OidcAuthenticationMechanism_ClientProxy.authenticate(OidcAuthenticationMechanism_ClientProxy.zig:189) 在 io.quarkus.vertx.http.runtime.security.HttpAuthenticator.attemptAuthentication(HttpAuthenticator.java:100) 在 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. 我能以某种方式更改连接尝试之间的 2 秒时间吗?
  3. 连接延迟和连接超时之间有什么关系吗?
  4. 它在 cca 2s 后失败 - 是否意味着它在第一次尝试时立即失败,或者它如此快地完成了 180 次尝试?
  5. DefaultTenantConfigResolver 在初始化时是否从与OidcRecorder 不同的资源获取租户,即是否应在多个位置配置租户?

【问题讨论】:

  • 是的,我已经使用 oicd 插件运行带有 keycloak 的 quarkus 至少一年了。你的授权方案是什么?,你打算使用受保护的资源还是只验证 JWT 令牌并从中检索信息?
  • 作为对一般错误的响应,您似乎缺少非租户配置的多租户配置。这意味着正如您在堆栈中看到的那样,无租户正在解析,因此没有从您的属性或租户解析器加载配置,这似乎是您的错误的原因
  • @karelss 我们需要管理对API的访问,主要使用RolesAllowed注解。
  • no-tenant 正在解决,因此没有从您的属性加载配置 - 请您澄清一下吗?在 2021-07-26 14:44:24,142 的日志消息中,您可以看到租户已加载,但稍后在 2021-07-27 06:11:54,261 它说租户为空。
  • 是的,我错过了那个日志条目,你能发布你的应用程序属性文件或最终配置来检查你有什么吗?只需将 放在出现私人信息的地方

标签: java kubernetes keycloak openid-connect quarkus


【解决方案1】:

终于成功了。由不正确的 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 doc 中强调了 URL 格式:请注意,如果您使用 Keycloak OIDC 服务器,请确保基本 URL 采用以下格式:https://host:port/auth/realms/{realm } 其中 {realm} 必须替换为 Keycloak 领域的名称

【讨论】:

  • 很高兴你找到了问题,这也发生在我第一次设置项目时,在我的情况下,我必须将 oidc 插件日志级别设置为 ALL 才能找到问题
猜你喜欢
  • 1970-01-01
  • 2020-08-14
  • 2020-11-25
  • 1970-01-01
  • 2020-12-09
  • 2020-02-05
  • 1970-01-01
  • 2021-11-15
  • 1970-01-01
相关资源
最近更新 更多