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

Keycloak跨环境认证后重定向URL错误致404问题

问题分析

当Keycloak部署在云端并搭配IIS反向代理时,本地Spring Boot客户端完成认证后,Keycloak错误地将重定向地址替换为自身域名(https://cloud.keycloak.com/login/oauth2/code/myClient),而非客户端的真实地址(http://localhost:8180/login/oauth2/code/myClient),导致404错误。核心原因是Keycloak在反向代理环境下未能正确识别客户端的原始请求上下文,错误使用了代理的域名生成重定向URI。

解决方案

1. 配置IIS反向代理传递转发头

IIS需要向Keycloak传递客户端的真实请求协议、主机和端口信息,让Keycloak能基于这些信息生成正确的重定向地址:

  • 打开IIS的URL重写规则,在对应反向代理规则中添加服务器变量配置:
    <serverVariables>
      <set name="HTTP_X_FORWARDED_PROTO" value="https" />
      <set name="HTTP_X_FORWARDED_HOST" value="cloud.keycloak.com" />
      <set name="HTTP_X_FORWARDED_PORT" value="443" />
    </serverVariables>
    
  • 进入IIS「应用程序请求路由」设置,在「服务器变量」选项卡中添加上述三个变量,并勾选「允许设置这些变量」。

2. 开启Keycloak的反向代理支持

让Keycloak信任反向代理传递的X-Forwarded-*头,从而正确识别客户端请求的真实地址:

  • 传统部署(本地/虚拟机):修改Keycloak的standalone.xml或standalone-ha.xml配置文件,在Undertow的HTTP监听器中启用forwarded属性:
    <server name="default-server">
      <http-listener name="default" socket-binding="http" redirect-socket="https" forwarded="true"/>
    </server>
    
  • 容器部署(Docker/K8s):添加环境变量启用官方推荐的edge代理模式:
    KC_PROXY=edge
    

3. 确认客户端重定向URI配置一致性

  • 在Spring Boot客户端的配置文件(application.yml/application.properties)中明确指定重定向URI:
    spring:
      security:
        oauth2:
          client:
            registration:
              myClient:
                redirect-uri: "http://localhost:8180/login/oauth2/code/myClient"
    
  • 登录Keycloak管理控制台,找到对应客户端,在「Valid Redirect URIs」列表中添加上述地址,确保Keycloak允许该重定向目标。

4. 验证修复效果

重启Keycloak和IIS服务后,重新发起认证流程,查看Keycloak日志,确认重定向地址已正确指向http://localhost:8180/login/oauth2/code/myClient,此时客户端应能正常接收授权码并完成认证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 12:40:58