You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

路径型反向代理下Quarkus OIDC/Keycloak重定向前缀重复问题

解决Quarkus OIDC在路径型反向代理下的重定向前缀重复问题

核心问题分析

你的问题根源在于:开启quarkus.http.proxy.enable-forwarded-prefix后,Quarkus会自动给所有生成的重定向URL添加X-Forwarded-Prefix的值,但OIDC流程中,state令牌保存的原始重定向目标已经是包含代理前缀的完整外部URL(比如https://oqm-test-us-24-04.local/core/base-station/overview),导致Quarkus二次重定向时重复添加前缀,最终出现路径重复的404错误。

解决方案

1. 调整Quarkus代理配置

关闭自动添加前缀的功能,避免重复拼接路径,同时保留其他代理相关配置以正确识别外部请求信息:

# Proxy配置
quarkus.http.proxy.proxy-address-forwarding=true
quarkus.http.proxy.allow-x-forwarded=true
quarkus.http.proxy.enable-forwarded-host=true
# 关闭自动添加前缀,避免重复拼接
quarkus.http.proxy.enable-forwarded-prefix=false

2. 配置OIDC完整回调路径

指定包含代理前缀的完整回调路径,确保Quarkus生成正确的重定向URL给Keycloak,同时避免认证循环:

# OIDC配置
# 指定完整的外部回调路径,对应代理转发后的路径
quarkus.oidc.authentication.redirect-path=/core/base-station/oauth2/callback
# 保持Cookie路径和后缀配置,避免跨路径认证问题
quarkus.oidc.authentication.cookie-path=/core/base-station/
quarkus.oidc.authentication.cookie-suffix=core-base-station

3. 验证Keycloak客户端配置

确保Keycloak中对应客户端的Valid Redirect URIs设置为:

https://<host>/core/base-station/*

这会允许Keycloak回调到代理前缀下的所有路径,避免回调被拒绝。

4. 确认代理头传递

确保反向代理正确传递以下请求头:

  • X-Forwarded-Proto: https
  • X-Forwarded-Host: <host>
  • X-Forwarded-Prefix: /core/base-station
    Quarkus会通过proxy-address-forwarding=true信任这些头,生成正确的外部URL。

为什么之前的配置会出现循环?

当你关闭enable-forwarded-prefix但仅设置redirect-path=/core/base-station时,Quarkus生成的OIDC回调URL会不完整(缺少默认的/oauth2/callback后缀),导致Keycloak回调到错误路径,触发Quarkus重新发起认证请求,最终形成重定向循环。指定完整的/core/base-station/oauth2/callback路径后,回调流程会正常完成。

内容的提问来源于stack exchange,提问作者Snappawapa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 14:05:13