我们在负载均衡器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-For
和x-Forwarded-Proto
,并按文档中的说明更改了相应的keycloak配置。
是否有任何可能缺少的配置或设置?
答案 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时,您需要确保:
HTTPS
TCP
,接收后端支持Proxy Protocol 在我的情况下,我的侦听器设置为TCP
,但未相应配置后端。我发现NGINX和Kubernetes的NGINX Ingress Controller支持此选项。