Keycloak .well-known/openid-configuration 未响应端点"https"协议



我们已经在负载平衡器(F5(后面部署了KeyCloak。OIDC客户端坐在公共网络中使用" HTTPS"进行所有通信。SSL以F5终止,数据包被转发给KeyCloak(例如端口8080(。
OIDC客户端的设计方式是使用它在.well-known/openid-configuration请求响应中收到的端点(例如/token等(。

这里的问题是.well-known配置正在使用协议作为http的URL响应所有端点,因为客户端正在使用https期望协议。因为这个客户端无法与这些URL建立安全的连接。

问题是 - 如何使用协议https的端点返回.well-known/openid-configuration请求返回;就像下面提到的那个

{
  "issuer":"https://<domain>/auth/realms/master",
  "authorization_endpoint":"https://<domain>/auth/realms/master/protocol/openid-connect/auth",
  "token_endpoint":"https://<domain>/auth/realms/master/protocol/openid-connect/token"
  .......
}

我们遵循了文档中提到的步骤。

即在F5中添加了x-Forwarded-Forx-Forwarded-Proto,并如文档中所示的相应的KeyCloak配置更改。我可能缺少任何配置或设置吗?

我已经为了几天而努力解决同样的问题,最后弄清楚了。问题在于,KeyCloak在代理后面运行时使用X-Forwarded-Proto HTTP标头来确定是否通过HTTPS发出了传入请求。您的负载平衡器(就我而言,AWS ELB(需要正确设置此标头(请参阅类似的问题(。

使用ELB时,您需要确保要么:

  1. 您的听众设置为HTTPS
  2. 您的听众设置为TCP,接收后端支持代理协议

在我的情况下,我的听众设置为TCP,但后端没有相应地配置。我发现Nginx和Kubernetes的Nginx Ingress Controller支持此选项。

从我收集的内容中,它可以在领域级别完成(我没有亲自使用(。尽管很长的过程解释了哪些完全超出了该答案的范围。相反,我给了文档的链接。

https://www.keycloak.org/docs/18.0/server_installation/#_clustering

最新更新