Keycloak AdminURL无限重定向循环(nginx代理)



我以前配置过这个设置,但是在尝试在一个新实例上复制它时,我无法使它工作。我正在使用standalone-ha模式,但是尝试使用standalone并不会产生差异。

实例配置了frontendUrl https://example.com。在standalone-ha.xml中只保留这个设置,前端和管理控制台都可以访问,没有任何问题。在将adminUrl https://intra.example.com添加到spi主机名部分之后,为了使它看起来像

<spi name="hostname">
<default-provider>default</default-provider>
<provider name="default" enabled="true">
<properties>
<property name="frontendUrl" value="https://example.com/auth/"/>
<property name="adminUrl" value="https://intra.example.com/auth"/>
<property name="forceBackendUrlToFrontendUrl" value="false"/>
</properties>
</provider>
</spi>

访问管理控制台不再工作。

在使用欢迎页面上的链接或直接浏览到它时,会出现登录页面(在https://example.com/auth上)。在使用有效凭证登录后,它将重定向到https://intra.example.com/auth/admin/master/console/,然后立即重定向到https://intra.example.com/auth/admin/master/console/#state=4626eb82-6993-4fff-8c11-399a05cb8c66&session_state=3198da2f-f6eb-45be-aa87-ae7d52e22068&code=fd73f80a-fe43-4996-b245-efa42efb7b44.3198da2f-f6eb-45be-aa87-ae7d52e22068.e794bdbc-6497-4fc3-8502-e0afedb67492。然后重定向到https://intra.example.com/auth/admin/master/console/,再重定向到长链接,然后再重定向到长链接,以此类推。这样循环往复。

实例位于nginx代理的后面,该代理配置了必要的标头:

server {
listen                  192.168.0.115:443 ssl http2;
server_name             intra.example.com;
ssl_certificate            <valid cert>;
ssl_certificate_key     <key>;
location                /auth {
proxy_pass          https://192.168.0.115:8843/auth;
proxy_ssl_verify    off;
proxy_set_header    Host                $host;
proxy_set_header    X-Real-IP           $remote_addr;
proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
proxy_set_header    X-Forwarded-Host    $host;
proxy_set_header    X-Forwarded-Server  $host;
proxy_set_header    X-Forwarded-Port    $server_port;
proxy_set_header    X-Forwarded-Proto   https;
}
}
server {
listen                  <public IPv4>:443 ssl http2;
listen                  [<public IPv6]:443 ssl http2;
server_name             example.com;
ssl_certificate            <valid cert>;
ssl_certificate_key     <key>;
location                /auth {
proxy_pass          https://192.168.0.115:8843/auth;
proxy_ssl_verify    off;
proxy_set_header    Host                $host;
proxy_set_header    X-Real-IP           $remote_addr;
proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
proxy_set_header    X-Forwarded-Host    $host;
proxy_set_header    X-Forwarded-Server  $host;
proxy_set_header    X-Forwarded-Port    $server_port;
proxy_set_header    X-Forwarded-Proto   https;
}

}

经过研究,我尝试了各种组合:

  • 代理根(/)而不是/auth

  • 代理到http而不是https

  • 添加proxy-address-forwarding到http/https监听器:

    <https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true" proxy-address-forwarding="true"/>
    
  • 添加代理监听器:

    <http-listener name="default" socket-binding="http" redirect-socket="proxy-https" enable-http2="true" proxy-address-forwarding="true"/>
    

    结合使用
    <socket-binding name="proxy-https" port="443"/>
    

    <http-listener name="default" socket-binding="http" redirect-socket="proxy-https" enable-http2="true" proxy-address-forwarding="true"/>
    
  • 暂时将数据库中的有效重定向uri设置为*

这似乎总结了一些关于这个问题的现有线程的想法。我发现其他线程正在使用Docker,而我正在使用本机实例。

如果有人有什么可以尝试的想法,我将非常感激。我需要管理控制台分离到一个专用的,内部的,URL,并且知道有这个场景工作之前。我甚至从nginx复制了相同的代理配置,因此不认为问题在那里,但我当然留下了这个选项。

在重定向期间似乎没有生成日志条目。我也尝试从--debug开始。

感谢您的阅读。

我想我也有类似的问题,长话短说(经过几天的谷歌搜索)以下内容帮助了我

location / {
....
proxy_pass_header       Set-Cookie;
....
}

功劳归Thomas Duxbury。以下是他的帖子以及他如何解决这个问题的后续解释。它帮助了我;-)https://keycloak.discourse.group/t/redirect-loop-logging-into-master-realm-behind-apache-reverse-proxy/8395

最新更新