Keycloak重定向URL为HTTP而非HTTPS问题求助
这个问题我碰到过好多次了——本质是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

