我们已经在一个负载均衡器F5后面部署了Keycloak。OIDC客户端坐在公共网络中,所有通信都使用"https“。SSL在F5中终止,数据包被转发到Keycloak (比方说在端口8080上)。
OIDC客户端被设计成使用它在.well-known/openid-configuration请求的响应中接收到的端点(如/token等)。
这里的问题是,对于as客户端期望使用https协议的所有端点,.well-known配置都使用协议为http的URL进行响应。因此,客户端无法与这些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"
.......
}我们遵循了documentation中提到的步骤。
也就是说,在F5中添加了x-Forwarded-For和x-Forwarded-Proto,并按照文档中的说明进行了相应的密钥罩配置更改。是否有我可能遗漏的配置或设置?
发布于 2018-09-14 01:51:17
几天来,我一直在为同样的问题而苦苦挣扎,终于找到了答案。问题是,当在代理后面运行时,Keycloak使用HTTPS头来确定传入的请求是否通过X-Forwarded-Proto发出。您的负载均衡器(在我的例子中是AWS ELB)需要正确地设置这个头(参见similar issue)。
使用ELB时,您需要确保以下任一条件:
如果您的监听器设置为HTTPS
,则
TCP在我的例子中,我的监听器被设置为TCP,但后端没有相应地配置。我发现NGINX和Kubernetes的NGINX Ingress Controller都支持这个选项。
发布于 2018-04-26 22:46:50
据我所知,它可以在领域级别上完成(我没有亲自使用过它)。尽管这是一个漫长的过程,但这完全超出了本答案的范围。取而代之的是,我提供了一个文档的链接。
https://www.keycloak.org/docs/3.3/server_installation/topics/network/https.html
https://stackoverflow.com/questions/50045489
复制相似问题