我们有一个简单的要求: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
您必须在代理配置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
您不需要安装证书或使用适配器配置中的更改。
这需要在你的standalone.xml
,standalone-ha
或domain.xml
(视情况而定)中完成,如Keycloak文档反向代理部分https://www.keycloak.org/docs/latest/server_installation/index.html#_setting-up-a-load-balancer-or-proxy中所记录
假设您的反向代理不使用端口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元素:
<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>