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

时间:2018-04-26 14:24:30

标签: keycloak oidc

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

这里的问题是,.well-known配置正在响应所有端点的协议为http的URL,其中客户端期望与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"
  .......
}

我们已按照https://code.visualstudio.com/中提到的步骤进行操作。

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

使用ELB时,您需要确保:

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

在我的情况下,我的侦听器设置为TCP,但未相应配置后端。我发现NGINX和Kubernetes的NGINX Ingress Controller支持此选项。