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

Keycloak重定向URL为HTTP而非HTTPS问题求助

解决Keycloak在Nginx SSL代理后redirect_uri为HTTP的问题

这个问题我碰到过好多次了——本质是Keycloak没察觉到自己运行在SSL终止代理后面,所以它会默认用代理和它之间的HTTP协议来生成redirect_uri参数。别担心,按下面几步就能搞定:

1. 确保Nginx正确传递HTTPS请求头

首先得让Nginx告诉Keycloak,用户的原始请求是通过HTTPS过来的。在你的Nginx配置中,针对Keycloak的location块里添加这些关键代理头:

location /auth {
    proxy_pass http://your-keycloak-internal-ip:8080;
    # 核心:传递HTTPS协议及客户端真实信息
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Port $server_port;
    
    # 如果你的Nginx本身还在其他代理(如负载均衡)后面,可开启realip模块
    # set_real_ip_from 10.0.0.0/8; # 根据你的内网IP段调整
    # real_ip_header X-Forwarded-For;
}

这些头会让Keycloak识别到实际的用户请求协议是HTTPS,而非代理与它通信的HTTP。

2. 开启Keycloak的代理地址转发模式

接下来要让Keycloak信任这些转发过来的头信息,开启代理适配模式:

传统部署(非Docker)

找到Keycloak的配置文件(比如standalone.xml或standalone-ha.xml),定位到<http-listener>节点,添加**proxy-address-forwarding="true"**属性:

<http-listener name="default" socket-binding="http" proxy-address-forwarding="true"/>

修改完成后重启Keycloak服务生效。

Docker部署

直接在启动命令中添加环境变量即可:

docker run -e KEYCLOAK_PROXY_ADDRESS_FORWARDING=true ...其他启动参数... quay.io/keycloak/keycloak:latest

或者在docker-compose.yml中配置:

environment:
  - KEYCLOAK_PROXY_ADDRESS_FORWARDING=true

3. 验证Keycloak客户端的重定向URI配置

最后检查你的adfs客户端的Valid Redirect URIs设置,确保它是HTTPS格式的地址,比如:
https://myapp.mydomain.com/signin-oidc
或者用通配符匹配:https://myapp.mydomain.com/*

如果之前配置的是HTTP地址,Keycloak会优先沿用旧配置生成redirect_uri,所以一定要改成HTTPS格式。

做完这三步后,重新测试访问受保护的应用,Keycloak生成的redirect_uri参数应该就会是HTTPS协议了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:45:27