【问题标题】:Keycloak .well-known/openid-configuration is not responding with "https" protocol for the endpointsKeycloak .well-known/openid-configuration 没有响应端点的“https”协议
【发布时间】:2018-10-07 07:13:22
【问题描述】:

我们在 F5 负载均衡器后面部署了 Keycloak。 OIDC 客户端位于公共网络中,使用“https”进行所有通信。 SSL 在 F5 中终止,数据包被转发到 Keycloak(例如端口 8080)。
OIDC 客户端的设计方式是使用它在响应.well-known/openid-configuration 请求时收到的端点(如/token 等)。

这里的问题是,.well-known 配置响应的 URL 的协议为 http,对于客户端期望协议为 https 的所有端点。由于此客户端无法与这些 URL 建立安全连接。

问题是 - 我们如何才能对 .well-known/openid-configuration 请求返回的响应带有协议 https 的端点;就像下面提到的那样

{
  "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"
  .......
}

我们已按照documentation 中提到的步骤进行操作。

即在 F5 中添加了 x-Forwarded-Forx-Forwarded-Proto 并按照文档中的说明进行了相应的 keycloak 配置更改。 是否有任何我可能遗漏的配置或设置?

【问题讨论】:

  • 你能解决这个问题吗?我在 Kubernetes Ingress 后面使用 Keycloak 遇到了同样的问题
  • 我也遇到了同样的问题,请分享一下你是怎么解决的

标签: keycloak openid-connect


【解决方案1】:

我这几天一直在为同样的问题苦苦挣扎,终于弄明白了。问题是 Keycloak 在代理后面运行时使用X-Forwarded-Proto HTTP 标头来确定传入请求是否是通过 HTTPS 发出的。您的负载均衡器(在我的情况下为 AWS ELB)需要正确设置此标头(请参阅 similar issue)。

使用 ELB 时,您需要确保:

  1. 您的听众设置为HTTPS
  2. 您的监听器设置为TCP,接收后端支持Proxy Protocol

在我的例子中,我的监听器设置为TCP,但后端没有相应地配置。我发现NGINX 和 Kubernetes 的NGINX Ingress Controller 支持这个选项。

【讨论】:

    【解决方案2】:

    据我所知,可以在领域级别完成(我没有亲自使用过)。尽管解释哪个完全超出了此答案的范围是一个漫长的过程。相反,我提供的是文档的链接。

    https://www.keycloak.org/docs/3.3/server_installation/topics/network/https.html

    【讨论】:

      猜你喜欢
      • 2020-04-02
      • 2021-09-25
      • 2017-06-23
      • 2019-02-08
      • 1970-01-01
      • 2021-09-09
      • 2022-01-08
      • 2016-10-08
      • 2018-05-10
      相关资源
      最近更新 更多