Keycloak 17 HA集群如何配置端点 解决cookie not found报错
问题原因
你遇到的cookie not found报错、OpenID Connect配置端点域名不一致问题,是Keycloak 17(Quarkus版本)反向代理与主机名配置错误导致的。
Keycloak会分两类生成端点地址:前端交互类端点(授权、登出、issuer声明)默认读取请求携带的Host头生成,后端接口类端点(token、用户信息、令牌校验)读取配置文件/启动参数里固定的前端地址生成。当前你的配置里,请求传到Keycloak时携带的Host是内部前端服务器名uiqa,配置里固定的前端地址是对外域名extqakc.xxx.com,两边不匹配就出现了配置片段里域名混乱的问题,Cookie作用域和实际请求域名不匹配,自然会抛出找不到Cookie的错误,这个问题在负载均衡做SSL卸载的高可用部署场景下非常常见。
修复方案
- 配置Keycloak启动固定参数
启动Keycloak时追加以下启动参数,禁止Keycloak随意从请求头里取主机名拼接地址:
其中# 替换为你实际的集群对外访问根路径 --hostname=https://extqakc.xxx.com/secauth --hostname-strict=false --proxy=edgeproxy=edge必须配置,对应负载均衡器做SSL卸载的场景,告诉Keycloak前置代理已经处理了HTTPS协议,不要自行判断请求协议生成http开头的地址。 - 校验前置代理/负载均衡转发规则
检查uiqa前端服务器、外层负载均衡的转发配置,确保转发请求到Keycloak节点时携带正确的转发头,不要把内部主机名传给Keycloak:X-Forwarded-Host值固定为对外域名extqakc.xxx.comX-Forwarded-Proto值固定为httpsX-Forwarded-Port值固定为443
- 验证修复结果
重启所有Keycloak集群节点,清除浏览器本地Cookie缓存、Keycloak realm缓存后,重新访问OpenID Connect发现接口,确认所有返回的端点域名统一为对外域名extqakc.xxx.com即可,此时Cookie作用域和请求域名完全匹配,cookie not found报错会自动消失。
注意:Keycloak 17及以后的Quarkus版本,已经移除了管理控制台内配置全局前端地址的入口,所有主机名、代理相关配置都必须通过启动参数或者对应环境变量配置,不用在管理界面里找相关配置项。
内容的提问来源于stack exchange,提问作者dc sos1700
相关产品推荐
相关产品推荐

