Keycloak .well-known / openid-configuration没有响应端点的“https”协议

问题描述 投票:1回答:2

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

这里的问题是.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配置更改。我可能缺少任何配置或设置吗?

keycloak oidc
2个回答
1
投票

从我收集的内容来看,它可以在领域层面上完成(我没有亲自使用过它)。虽然这是一个很长的过程解释,完全超出了这个答案的范围。相反,我给出了一个文档的链接。

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


0
投票

我几天来一直在努力解决同样的问题并最终弄明白了。问题是Keycloak在代理后面运行时使用X-Forwarded-Proto HTTP头来确定传入请求是否是通过HTTPS发出的。您的负载均衡器(在我的案例中为AWS ELB)需要正确设置此标头(请参阅similar issue)。

使用ELB时,您需要确保:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.