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

Docker+Keycloak+IIS反向代理:外部IdP授权端点Base Url被替换问题

解决Keycloak反向代理下外部OIDC身份提供商授权端点被替换的问题

问题背景

Keycloak 22.0.1(Quarkus版本)容器化部署在Ubuntu Docker环境,配合Windows Server 2019 IIS反向代理使用,代理域名为www.example_kcproxy.com。对接Azure AD OIDC身份提供商时,无反向代理可正常登录,但启用代理后,跳转至Azure AD的授权端点域名被替换为代理域名或Keycloak私有IP,导致地址错误。

解决方案

核心问题在于KC_HOSTNAME_STRICT参数的配置,严格模式会强制Keycloak重写所有URL为指定的代理域名,包括第三方身份提供商的外部端点。调整以下配置即可解决:

1. 修改Docker-Compose环境变量

移除旧版兼容参数KEYCLOAK_FRONTEND_URL,并将KC_HOSTNAME_STRICT设为0,保留其他必要代理配置:

KC_PROXY_ADDRESS_FORWARDING: true
KC_HOSTNAME_ADMIN_URL: https://www.example_kcproxy.com/
KC_HOSTNAME_STRICT: 0
KC_PROXY: edge
KC_HOSTNAME: www.example_kcproxy.com
KC_HOSTNAME_STRICT_HTTPS: 1

2. 配置说明

  • KC_HOSTNAME_STRICT: 0:关闭严格主机名模式,Keycloak将保留外部身份提供商的原始URL,仅对自身内部URL使用代理域名。
  • 移除KEYCLOAK_FRONTEND_URL:Quarkus版本的Keycloak推荐使用KC_HOSTNAME系列参数,旧版参数可能导致URL处理逻辑冲突。
  • 保留KC_PROXY: edge:适配IIS这种边缘反向代理场景,确保Keycloak正确识别X-Forwarded系列请求头。

3. 验证IIS反向代理配置

确认IIS的web.config中X-Forwarded头配置正确(无需修改):

<serverVariables>
 <set name="HTTP_X_Forwarded_Proto" value="https" />
 <set name="HTTP_X_Forwarded_For" value="{HTTP_X_Forwarded_For},{REMOTE_ADDR}"/>
 <set name="HTTP_X_Forwarded_Host" value="{HTTP_HOST}" />
</serverVariables>

4. 确认Azure AD身份提供商配置

确保Azure AD OIDC身份提供商的授权端点配置为完整的外部URL,例如:
https://login.microsoftonline.com/[tenantId]/oauth2/v2.0/authorize

效果验证

重启Keycloak容器后,通过反向代理访问并尝试登录,跳转至Azure AD的授权端点将保持原始域名,不再被替换为代理域名或私有IP。

内容的提问来源于stack exchange,提问作者Nathanael de wet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 02:58:16