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

Keycloak Invalid redirect_uri问题:CNAME域名被解析为负载均衡地址

问题解决思路

这问题本质是你的后端服务没拿到用户实际访问的自定义域名api.mydomain.com,反而获取到了负载均衡的DNS地址,导致它向Keycloak请求认证时,传递的重定向URI是负载均衡地址,和你配置的https://api.mydomain.com/*不匹配,触发了Keycloak的安全校验。

1. 检查AWS负载均衡的HTTP头转发配置

AWS负载均衡默认可能不会把原始请求的关键头完全传给后端,你需要确保它正确转发以下内容:

  • 对于应用负载均衡(ALB):
    • 进入负载均衡的监听器配置,确认转发规则里开启了「转发原始Host头」(一般默认是开的,但最好手动核对)。
    • 配置负载均衡添加X-Forwarded-For、X-Forwarded-Proto、X-Forwarded-Host这三个HTTP头——这三个头是后端服务识别真实请求地址的关键。
  • 对于经典负载均衡(CLB):
    • 在负载均衡的属性页面,开启「转发客户端IP」和「保留HTTP Host头」选项。

2. 让后端服务信任并使用负载均衡的代理头

你的后端服务需要知道这些X-Forwarded-*头来自可信的负载均衡,并且用这些头来构建正确的重定向URI:

  • 如果是Spring Boot后端,在application.properties里添加以下配置:
    server.forward-headers-strategy=framework
    server.tomcat.remote-ip-header=x-forwarded-for
    server.tomcat.protocol-header=x-forwarded-proto
    
  • 如果是Node.js/Express后端,使用express-trust-proxy中间件,配置信任负载均衡的IP段,让应用用X-Forwarded-Host作为请求的Host。
  • 其他语言框架逻辑类似,核心是让服务识别代理传递的真实请求地址,而非负载均衡的地址。

3. 核对Keycloak客户端配置

再确认一遍Keycloak客户端的Valid redirect URIs确实填了https://api.mydomain.com/*,同时检查客户端的「Base URL」不要设成负载均衡的地址,保持和自定义域名一致。

4. 检查SSL终止的协议传递

如果你的负载均衡做了SSL终止(用户访问的是HTTPS,负载均衡和后端之间用HTTP通信),必须确保后端通过X-Forwarded-Proto头拿到原始的HTTPS协议,否则后端可能生成HTTP的重定向URI,同样会被Keycloak拒绝。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:05:24