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

Nginx反向代理下Keycloak与Spring Boot集成时redirect_uri被截断问题求助

问题根因

你的Nginx反向代理在转发请求到Spring Boot应用时,剥离了/oauth路径前缀,且未将路径前缀信息通过请求头传递给后端Spring Boot服务,导致Spring Boot侧的Keycloak适配器生成重定向地址时,无法感知到外层的/oauth路径前缀,最终生成的redirect_uri缺失该前缀。

解决步骤

1. 修正Nginx配置

调整Nginx的location块,新增X-Forwarded-Prefix请求头传递路径前缀,同时修正错误的X-Forwarded-For头配置:

location ~ ^/oauth(.*)$ {
    proxy_pass http://11.11.11.11$1?$query_string;
    proxy_buffering off;
    proxy_redirect off;
    # 修正X-Forwarded-For为正确的客户端IP传递规则
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    # 新增路径前缀传递头
    proxy_set_header X-Forwarded-Prefix /oauth;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
}

修改后执行nginx -s reload重载配置生效。

2. 修正Spring Boot配置

添加Tomcat识别X-Forwarded-Prefix头的相关配置,替换已废弃的server.use-forward-headers配置:

# 原有keycloak基础配置保持不变
keycloak.auth-server-url=https://example.com/auth/
keycloak.realm =realm
keycloak.ssl-required =external
keycloak.resource =resource
keycloak.credentials.secret =111111-111111-111111-1111
keycloak.securityConstraints[0].authRoles[0] =role
keycloak.securityConstraints[0].securityCollections[0].name=test
keycloak.securityConstraints[0].securityCollections[0].patterns[0] =/idp

# 替换原有转发头配置
server.forward-headers-strategy=native
server.tomcat.remote_ip_header=X-Forwarded-For
server.tomcat.protocol_header=X-Forwarded-Proto
# 开启对X-Forwarded-Prefix头的识别
server.tomcat.use-relative-redirects=true

# 可选配置:如果上述配置后仍未生效,可强制指定Keycloak适配器的路径前缀
# keycloak.base-path=/oauth

3. 校验Keycloak客户端配置

登录Keycloak管理后台,进入你使用的对应客户端配置页,确认有效重定向URI字段配置包含https://example.com/oauth/*,避免重定向地址被Keycloak安全策略拦截。

验证

重启Spring Boot应用后访问受保护路径,此时生成的redirect_uri会自动带上/oauth前缀,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:15:03