我们有一个简单的要求: PS :https:/ === https://
当用户点击 https:/company_landing.company.com 时,应将其重定向到keycloak登录页面( https:/ourcompany-keycloak.company.com ) 。用户输入他/她的keycloak登录凭据。成功登录keycloak后,它们将显示在company_landing页面上。
问题是:
用户类型 - https:/company_landing.company.com
Keycloak尝试打开登录页面,但提供500内部服务器错误,并说“错误的重定向uri”,在浏览器中我看到:
的https:/ourcompany-keycloak.company.com/auth/realms/realm1/tokens/login CLIENT_ID = company_dev&安培;状态= aaaafffff-559d-4312-a8be-123412341234&安培;的 REDIRECT_URI = HTTP%3A%2F? %2Fcompany_landing.company.com%3A8081%2F%3Fauth_callback%3D1
如果您观察到上面的重定向uri,我认为问题在于,重定向uri不是以https开头,而是http,而且http:/company-landing.company.com不存在。
设定: keycloak设置: -
境界 - >设置 - >登录:需要SSL =所有请求(也尝试使用“外部”)
应用程序 - > realm1 - >设置 - >重定向URI = https://company_landing.company.com/ *
AWS负载均衡器: 端口配置:443(https)转发到8443
我很困惑为什么它会剥离SSL?在本地环境上测试时,上述工作正常(可能是因为它的http://localhost),但在尝试访问任何ssl加密的链接时,这总是会提供无效的重定向URL。
-mm
答案 0 :(得分:5)
您必须在代理配置json文件中添加以下属性(默认为proxy.json)作为应用程序属性(与" adapter-config"相同):
"proxy-address-forwarding" : true,
此配置属性未记录,但存在于代理配置的源中:https://github.com/keycloak/keycloak/blob/master/proxy/proxy-server/src/main/java/org/keycloak/proxy/ProxyConfig.java
答案 1 :(得分:0)
您不需要安装证书或在适配器配置中使用更改。
这需要在Keycloak文档反向代理部分https://www.keycloak.org/docs/latest/server_installation/index.html#_setting-up-a-load-balancer-or-proxy中记录的standalone.xml
,standalone-ha
或domain.xml
(视情况而定)中完成>
假设您的反向代理未将端口8443用于SSL,您还需要配置HTTPS流量重定向到的端口。
<subsystem xmlns="urn:jboss:domain:undertow:4.0">
...
<http-listener name="default" socket-binding="http"
proxy-address-forwarding="true" redirect-socket="proxy-https"/>
...
</subsystem>
将redirect-socket属性添加到http-listener元素。该值应为proxy-https,它指向您还需要定义的套接字绑定。
然后将新的套接字绑定元素添加到套接字绑定组元素:
<socket-binding-group name="standard-sockets" default-interface="public"
port-offset="${jboss.socket.binding.port-offset:0}">
...
<socket-binding name="proxy-https" port="443"/>
...
</socket-binding-group>